.. _web-standard-cryptograpy: 情報の暗号化の標準 ============================================ 概要 -------------------- この文書では, Webアプリケーションでの機密情報の暗号化についての標準を規定する. 個人情報などの機密情報をそのままDBなどに保管することには改竄や漏洩のリスクがある. これを避けるために正真性の保証や暗号化を行なわなければならない. Webアプリケーションでの暗号化の方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ どこで暗号化するか ################################################## サービスの開発者は, アプリケーションサーバで暗号化/復号を行ないDBサーバは暗号化された情報を保存しなければならない. DBサーバが脆弱であったとしても暗号の情報が漏れず機密情報を復号できないからだ. 共通鍵暗号 ############## サービスの開発者は, 暗号化をする際に以下の共通鍵暗号のうちのいずれかを利用しなければならない. * TWOFISH-256 * TWOFISH-192 * TWOFISH-128 * AES-128(Rijndael-128-128) * Rijndael-256-256 (鍵サイズもブロックサイズも256bitのもの) * Rijndael-192-192 (鍵サイズもブロックサイズも192bitのもの) * Serpent-256 * Serpent-192 * Serpent-128 新規に暗号を利用する際, 強度を優先する場合はTWOFISH-256の利用を, 互換性を優先する場合は AES-128の利用を推奨する. AES-192,AES-256は, 攻撃が見付かっており期待通りの保護が得られないことが知られているので利用してはならない. 参考: `Schneier on Security: Another New AES Attack `_ 暗号モード #################### サービスの開発者は, ブロック暗号の暗号モードとして次のいずれかを利用しなければならない. - CTR - CBC CTRモードの利用を推奨する. 鍵の管理 #################### サービスの開発者は, 暗号化の鍵は以下のように管理しなければならない. * アプリケーションサーバの当該アプリケーションの関係者以外が閲覧/編集できないような場所に格納する必要がある. 共用のサーバに置く場合には注意すること. * バージョン管理システムの管理対象としてはならない. * 実機と開発機/プレ機で別の鍵を利用しなければならない. * 物理的に1箇所に保存していると鍵を失う危険がある. バックアップとしてオフィスに暗号化して保存してもよい. この暗号化のための鍵も関係者以外に漏らさないようにしなければならない. 情報の正真性の保証 ------------------------------- 情報を暗号化してDBに保存したとしても, DBへのアクセス権限を持つものによってレコード間でカラムを入れかえたり上書きするなどして情報を改竄される恐れがある. このリスクが無視できない場合は, 情報の正真性の保証を行なう必要がある. 正真性の保証の方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 保証を行なう場所, 鍵の管理 ################################################################ 暗号化と同じである. MAC ####################### サービスの開発者は, 正真性の保証が必要な場合にMAC(メッセージ認証コード)を用いる必要がある. MACには, HMACを推奨する. HMACで利用するハッシュ関数には以下のいずれかを利用しなければならない. * SHA-256 * SHA-512 * SHA-512/256 SHA-256 を推奨する. 機密情報のDBからの消去 --------------------------------------------------------------- サービスの開発者は, ユーザの退会などで不要となった機密情報をすみやかにDBから削除しなければならない. ただし, 不正の防止などに必要な場合は一定期間ないし恒久的に機密情報を保持してもよい. ただし, 保持する機密情報は最低限のものとすること, .. _secure-remove: 機密情報の削除/廃棄 ---------------------------------------------------- 機密情報の削除や機密情報を含むメディアを破棄する場合には, 以下の手段のうちいずれかを行なければならない. * NDAを締結した廃棄業者への引渡し * HDDの場合, ファイルの安全な削除ツールを利用した削除 ファイルの安全な削除ツール ------------------------------------------------------ 以下のツールの利用を推奨する. * `Eraser `_ * `GNU shred `_ これらのツールはHDDのような磁気メディアでのみ有効であり, SSDなどでは単純な利用では有効ではないと考えられる. サービスの開発者は, 磁気メディア以外に機密情報を保存する場合は, 廃棄/削除に専用のツールを用いるか廃棄業者を利用しなければならない. 2015/07注: `ハードディスクの正しい消去 `_ によると HDD 全体を消す場合 `CMRR - Center for Magnetic Recording Research `_ を利用するのが適当とのこと 機密情報の他者とのやりとり ---------------------------------------------------- 機密情報を他社や社外の個人とやりとりする場合, 次の手段のうちいずれかを行なわなければならない. 複数の手段を組合せてもよい. * NDAを締結した運輸業者の利用 * 廃棄証明書を提出できる業者を利用すること * NDAや相当の契約を締結した会社が運営するファイル転送プログラムの利用 * PGPやS/MIMEでのメールの保護 * SSLでの経路の保護 * 機密情報ファイルの暗号化 ファイルの暗号化 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ファイルの暗号化には次のツールの利用を推奨する. * `GNU Privacy Guard `_ その他の注意事項 ----------------------------------- * サービスの開発者は, セッションをDBやmemcachedなどに保存している場合に機密情報をセッションに格納してはならない.