私は現在、node.jsを使用してnode-webkit用に記述された(一種の)安全なデスクトップベースのRTFテキストエディタを構築しようとしています。ここで読んだいくつかの回答に基づいています。たとえば、- 「文字列」パスワードをAESで使用されるキーに安全に変換するにはどうすればよいですか? および PKBDF2-SHA256を使用する場合の推奨反復回数? とりわけ、私は思いついたしかし、私はこれらのアルゴリズムをどのように組み合わせたかについてはかなり確信が持てず、誰かがシステムをチェックしてくれることを望んでいました。
初めてのアプリケーションの初期化時:
k
)s
)p
)P
)(私のシステムでは1秒強かかります)K
)s||n||l||K
ディスク上新しいファイルを暗号化して保存する場合:
p
)s||n||l||K
ディスクからp
、P
、およびs
を使用して、n
をl
にストレッチします。K
を使用してP
を復号化しますk
を使用して、AESCBCを使用してファイルデータを暗号化します。ディスクに保存考えられる懸念事項(これは最新のラップトップ/デスクトップで使用できることになっていることに注意してください)には、次のものがあります。
私の観察は次のとおりです。
l
の値を保存しても意味がありません。代わりにn
を保存する必要があります。 PBKDF2は、l
の値ごとに異なるシーケンスを生成するのではなく、シーケンスをより長く拡張することに注意してください。k
に1024バイト、P
に512バイトを生成するのは奇妙に思えます。k
はAES-CBCを使用して暗号化されると言いますが、IVがどのように選択されるかについては言及しません。 k
には重複するブロックがないため、これはここではそれほど重要ではありませんが、暗号モードを適切に使用することをお勧めします。あなたの一般的な構造は実際には大丈夫ですが、安全な構造と弱い構造を区別する詳細が欠けています。
これが私がそれをする方法です:
128ビットキーが使用されており、AESのブロックサイズは128ビットであるため、計算時に暗号化する必要があるブロックは1つだけですk 'dしたがって、ECBモードのAESは安全です。 CBCまたは別のモードを使用するという追加の複雑さは不要です。
メタデータの信頼性レコードを提供することで、攻撃者がファイルの復号化に必要なパラメーターを「微調整」するのを防ぐことができます。最も重要なことは、IVの信頼性を提供することです。これは、変更の主要なターゲットです。値を使用してxorを実行すると、復号化時にプレーンテキストの最初のブロックもその値を使用してxorを実行するためです。この特性は、展性として知られています。部分的に知られている(たとえば構造化された)平文の場合、これは壊滅的な影響を与える可能性があります。
ここから、ファイルの暗号化と復号化の残りのプロセスを推定できるはずです。私が行う追加の1つは、暗号化されたデータのHMACハッシュを計算し、それをヘッダーに格納して、暗号化されたデータの信頼性を確保することです。