ログ/履歴にパスワードがある場合は、最初にログ/保存のバグを修正してみませんか?
そうでなければ、あなたが望むかもしれない明確なものがあります:
パスワードを安全な方法で保存し、ユーザー入力と比較するための、などPBKDF2
のパスワード ハッシュ スキーム。これは通常、サーバー側でパスワードを使用した何らかの認証を実装する必要がある場合です。bcrypt
argon2
AES のようなパスワード暗号化および保護スキーム。一部のサービスを自動的に認証するにはパスワードが必要であり、何らかの形式の平文パスワードが必要です。
いくつかの機密データがあり、非クリアテキスト形式で安全に保存する必要があります。
ケース 1 の場合は、aes
パッケージを使用しないでください。これは、ジョブにとって不適切なツールです。ケース 2 の場合、aes
パッケージが役立つかもしれませんが、パスワードを秘密にしておくという問題を、キーを秘密にしておくという別の問題と交換しただけです (大きな勝利ではありません)。したがって、aes
がオプションである唯一の実行可能なケースは 3.
上記のケース 3 のように、機密データを可逆的に保存する必要があるとします。
AESにはいくつかの可能な操作モードがECB
あります。Tcllib パッケージはand のみをサポートし、 (デフォルトである) のみが実際に使用するオプションです。モードを使用してはいけない理由の例については、ウィキペディアを参照してください。CBC
OFB
GCM
CTR
ECB
CBC
CBC
ECB
実際の質問に戻ります。
初期化ベクトル (IV)
これは暗号化ごとに選択するランダムな値であり、秘密ではありません。暗号化されたデータと一緒に公開できます。ランダムな IV を選択すると、同じキーと平文を使用している場合でも、2 つの暗号化ブロックを区別するのに役立ちます。
秘密鍵
これもランダムな値ですが、暗号化と復号化に使用できるため、秘密にしておく必要があります。多くの場合、複数の暗号化に同じキーを使用します。
良いランダム性はどこで得られますか?
Linux、BSD、またはその他の unixoid システムを使用している場合は、からバイトを読み取る/dev/urandom
か、ラッパーを使用しますgetrandom()
。expr {rand()}
Tclまたは同様の疑似乱数ジェネレーター (PRNG)を使用しないでください。Windows TWAPI では、このCryptGenRandom
機能が最適ですが、残念ながら、Tcl の高レベルのラッパーは含まれていません。
それで十分?
依存します。大ざっぱな見た目から少し平文を隠したいだけなら、多分。攻撃者がデータを操作したり、システムのハッキングを積極的に試みたりしている場合は、そうではありません。プレーンな AES-CBC には多くの間違いがあり、専門家でさえ間違っています (AES-CBC での SSL/TLS 1.0 の問題について読んでください)。
最後に: あなたが暗号化アルゴリズムの初心者である場合は、何を保護したいのか、何を保護する必要があるのかを必ず理解してください。多くの落とし穴があります。