付録D: セキュリティベストプラクティス
ゲノムデータの安全な取り扱い
import hashlib
import os
from cryptography.fernet import Fernet
class SecureGenomicDataHandler:
"""ゲノムデータの安全な取り扱い"""
def __init__(self):
# 暗号化キーの生成(実際には安全に保管)
self.key = Fernet.generate_key()
self.cipher = Fernet(self.key)
def anonymize_sample_id(self, original_id):
"""サンプルIDの匿名化"""
# SHA-256ハッシュによる不可逆変換
hash_object = hashlib.sha256(original_id.encode())
return hash_object.hexdigest()[:16]
def encrypt_sensitive_data(self, data):
"""機密データの暗号化"""
if isinstance(data, str):
data = data.encode()
encrypted = self.cipher.encrypt(data)
return encrypted
def secure_delete(self, filepath):
"""安全なファイル削除"""
if os.path.exists(filepath):
# ランダムデータで上書き
filesize = os.path.getsize(filepath)
with open(filepath, "ba+", buffering=0) as f:
for _ in range(3): # 3回上書き
f.seek(0)
f.write(os.urandom(filesize))
# ファイル削除
os.remove(filepath)
アクセス制御の実装
from functools import wraps
import jwt
from datetime import datetime, timedelta
class AccessControl:
"""ゲノムデータへのアクセス制御"""
def __init__(self, secret_key):
self.secret_key = secret_key
def generate_token(self, user_id, permissions):
"""アクセストークンの生成"""
payload = {
'user_id': user_id,
'permissions': permissions,
'exp': datetime.utcnow() + timedelta(hours=24)
}
token = jwt.encode(payload, self.secret_key, algorithm='HS256')
return token
def verify_permission(self, required_permission):
"""権限検証デコレータ"""
def decorator(func):
@wraps(func)
def wrapper(self, token, *args, **kwargs):
try:
payload = jwt.decode(
token,
self.secret_key,
algorithms=['HS256']
)
if required_permission not in payload['permissions']:
raise PermissionError("Insufficient permissions")
return func(self, *args, **kwargs)
except jwt.ExpiredSignatureError:
raise ValueError("Token expired")
except jwt.InvalidTokenError:
raise ValueError("Invalid token")
return wrapper
return decorator
← 前へ: パフォーマンス最適化 | 目次に戻る | 次へ: コード例集 → |