Copy docker run --rm zchencow/innozverse-python:latest python3 -c "
import secrets, hashlib, hmac, base64, json, time, zlib
from datetime import datetime, timezone
# Step 3: Secure token generation
print('=== Secure Token Generation ===')
api_key = secrets.token_hex(32) # 64 hex chars = 256 bits
session_tok = secrets.token_urlsafe(32) # 43 URL-safe base64 chars
otp_6 = secrets.randbelow(10**6) # 0-999999
otp_8 = secrets.randbelow(10**8) # 0-99999999
csrf_token = secrets.token_hex(16)
print(f'API key (hex-64): {api_key[:32]}...')
print(f'Session (urlsafe-43): {session_tok[:32]}...')
print(f'OTP 6-digit: {otp_6:06d}')
print(f'OTP 8-digit: {otp_8:08d}')
print(f'CSRF token: {csrf_token}')
# API key with prefix (like GitHub gh_, Stripe sk_)
def generate_api_key(prefix: str = 'inz') -> str:
return f'{prefix}_{secrets.token_urlsafe(32)}'
keys = [generate_api_key('inz') for _ in range(3)]
for k in keys: print(f' {k[:20]}...')
# Step 4: Password hashing system
print()
print('=== Password Hashing ===')
def hash_password(password: str) -> str:
'''Returns a storable string: algorithm$iterations$salt$hash'''
salt = secrets.token_bytes(16)
dk = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 260_000, dklen=32)
salt_b64 = base64.b64encode(salt).decode()
hash_b64 = base64.b64encode(dk).decode()
return f'pbkdf2-sha256$260000${salt_b64}${hash_b64}'
def verify_password(password: str, stored: str) -> bool:
algo, iters, salt_b64, hash_b64 = stored.split('$')
salt = base64.b64decode(salt_b64)
dk = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, int(iters), dklen=32)
return hmac.compare_digest(hash_b64, base64.b64encode(dk).decode())
stored = hash_password('s3cur3P@ssw0rd!')
print(f'Stored hash: {stored[:40]}...')
print(f'Correct password: {verify_password(\"s3cur3P@ssw0rd!\", stored)}')
print(f'Wrong password: {verify_password(\"password123\", stored)}')
print(f'SQL injection: {verify_password(\"\\' OR 1=1--\", stored)}')
# Step 5: JWT-style signed token (no external libs)
print()
print('=== JWT-style Tokens ===')
SECRET = secrets.token_bytes(32)
def create_token(payload: dict, ttl_sec: int = 3600) -> str:
payload = {**payload, 'iat': int(time.time()), 'exp': int(time.time()) + ttl_sec}
header = base64.urlsafe_b64encode(b'{\"alg\":\"HS256\",\"typ\":\"JWT\"}').rstrip(b'=').decode()
body = base64.urlsafe_b64encode(json.dumps(payload).encode()).rstrip(b'=').decode()
signing_input = f'{header}.{body}'.encode()
sig = base64.urlsafe_b64encode(
hmac.new(SECRET, signing_input, hashlib.sha256).digest()
).rstrip(b'=').decode()
return f'{header}.{body}.{sig}'
def verify_token(token: str) -> dict:
parts = token.split('.')
if len(parts) != 3: raise ValueError('Invalid token format')
header, body, sig = parts
signing_input = f'{header}.{body}'.encode()
expected_sig = base64.urlsafe_b64encode(
hmac.new(SECRET, signing_input, hashlib.sha256).digest()
).rstrip(b'=').decode()
if not hmac.compare_digest(sig, expected_sig):
raise ValueError('Invalid signature')
payload = json.loads(base64.urlsafe_b64decode(body + '==').decode())
if payload['exp'] < time.time():
raise ValueError(f'Token expired at {datetime.fromtimestamp(payload[\"exp\"])}')
return payload
token = create_token({'user_id': 1, 'email': '[email protected] ', 'role': 'admin'})
print(f'Token: {token[:60]}...')
payload = verify_token(token)
print(f'Payload: user_id={payload[\"user_id\"]} role={payload[\"role\"]}')
try: verify_token(token[:-5] + 'XXXXX')
except ValueError as e: print(f'Tampered: {e}')
# Step 6: Data integrity for file/DB records
print()
print('=== Data Integrity ===')
class IntegrityWrapper:
def __init__(self, secret_key: bytes):
self._key = secret_key
def seal(self, data: dict) -> dict:
body = json.dumps(data, sort_keys=True).encode()
mac = hmac.new(self._key, body, hashlib.sha256).hexdigest()
return {'data': data, 'mac': mac, 'ts': int(time.time())}
def unseal(self, sealed: dict) -> dict:
body = json.dumps(sealed['data'], sort_keys=True).encode()
expected = hmac.new(self._key, body, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, sealed['mac']):
raise ValueError('Integrity check failed — record may have been tampered')
return sealed['data']
iw = IntegrityWrapper(SECRET)
record = {'id': 1, 'order': 'INZ-001', 'total': 1728.00, 'status': 'paid'}
sealed = iw.seal(record)
print(f'Sealed: mac={sealed[\"mac\"][:16]}...')
print(f'Intact: {iw.unseal(sealed)}')
sealed['data']['total'] = 0.01 # tamper
try: iw.unseal(sealed)
except ValueError as e: print(f'Detected: {e}')
# Step 7: Audit log with tamper-proof chain
print()
print('=== Audit Log (Hash Chain) ===')
class AuditLog:
def __init__(self, key: bytes):
self._key = key
self._entries: list[dict] = []
self._prev_hash = '0' * 64
def append(self, action: str, data: dict, user: str) -> dict:
entry = {
'seq': len(self._entries) + 1,
'ts': int(time.time()),
'user': user,
'action': action,
'data': data,
'prev_hash': self._prev_hash,
}
body = json.dumps(entry, sort_keys=True).encode()
entry['hash'] = hmac.new(self._key, body, hashlib.sha256).hexdigest()
self._prev_hash = entry['hash']
self._entries.append(entry)
return entry
def verify(self) -> tuple[bool, str]:
prev = '0' * 64
for e in self._entries:
check = {k: v for k, v in e.items() if k != 'hash'}
check['prev_hash'] = prev
body = json.dumps(check, sort_keys=True).encode()
expected = hmac.new(self._key, body, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, e['hash']):
return False, f'Entry {e[\"seq\"]} is invalid'
prev = e['hash']
return True, f'All {len(self._entries)} entries valid'
log = AuditLog(SECRET)
log.append('LOGIN', {'ip': '192.168.1.1'}, '[email protected] ')
log.append('ORDER', {'order_id': 'INZ-001', 'total': 1728.0}, '[email protected] ')
log.append('REFUND', {'order_id': 'INZ-001', 'reason': 'return'}, '[email protected] ')
log.append('LOGOUT', {}, '[email protected] ')
valid, msg = log.verify()
print(f'Audit log: {msg}')
print(f'Entries:')
for e in log._entries:
print(f' #{e[\"seq\"]:02d} [{e[\"action\"]:8s}] {e[\"user\"]:20s} {e[\"hash\"][:12]}...')
# Step 8: Capstone — secure API key management
print()
print('=== Capstone: API Key Manager ===')
class APIKeyManager:
def __init__(self, master_secret: bytes):
self._secret = master_secret
self._keys: dict[str, dict] = {} # prefix → metadata
def create_key(self, name: str, scopes: list[str], ttl_days: int = 365) -> str:
raw = secrets.token_bytes(32)
prefix = raw[:4].hex()
key_str = f'inz_{prefix}_{base64.urlsafe_b64encode(raw[4:]).rstrip(b\"=\").decode()}'
key_hash = hashlib.sha256(key_str.encode()).hexdigest()
self._keys[key_hash] = {
'name': name, 'scopes': scopes,
'created': int(time.time()),
'expires': int(time.time()) + ttl_days * 86400,
'last_used': None, 'call_count': 0,
}
return key_str
def authenticate(self, key_str: str) -> dict | None:
key_hash = hashlib.sha256(key_str.encode()).hexdigest()
meta = self._keys.get(key_hash)
if not meta: return None
if meta['expires'] < time.time(): return None
meta['last_used'] = int(time.time())
meta['call_count'] += 1
return meta
def revoke(self, key_str: str) -> bool:
key_hash = hashlib.sha256(key_str.encode()).hexdigest()
return self._keys.pop(key_hash, None) is not None
mgr = APIKeyManager(SECRET)
admin_key = mgr.create_key('Dr. Chen Admin', ['read', 'write', 'admin'])
user_key = mgr.create_key('Alice Read-Only', ['read'])
print(f'Admin key: {admin_key[:20]}...')
print(f'User key: {user_key[:20]}...')
meta = mgr.authenticate(admin_key)
print(f'Auth admin: scopes={meta[\"scopes\"]} calls={meta[\"call_count\"]}')
meta = mgr.authenticate(user_key)
meta = mgr.authenticate(user_key)
print(f'Auth user: calls={meta[\"call_count\"]}')
print(f'Auth wrong: {mgr.authenticate(\"inz_aaaa_BADKEY\")}')
print(f'Revoked: {mgr.revoke(user_key)}')
print(f'After revoke: {mgr.authenticate(user_key)}')
"