0

I have a tcl/tk based tool, which uses network password for authentication. Issue is that, it is saving password in the logs/history. So objective is to encrypt the password.

I tried to use aes package. But at the very beginning aes::init asks for keydata and initialization vector (16 byte). So how to generate IV and keydata. Is is some Random number? I am a novice in encryption algorithms.

4

2 に答える 2

1

ログ/履歴にパスワードがある場合は、最初にログ/保存のバグを修正してみませんか?

そうでなければ、あなたが望むかもしれない明確なものがあります:

  1. パスワードを安全な方法で保存し、ユーザー入力と比較するための、などPBKDF2のパスワード ハッシュ スキーム。これは通常、サーバー側でパスワードを使用した何らかの認証を実装する必要がある場合です。bcryptargon2

  2. AES のようなパスワード暗号化および保護スキーム。一部のサービスを自動的に認証するにはパスワードが必要であり、何らかの形式の平文パスワードが必要です。

  3. いくつかの機密データがあり、非クリアテキスト形式で安全に保存する必要があります。

ケース 1 の場合は、aesパッケージを使用しないでください。これは、ジョブにとって不適切なツールです。ケース 2 の場合、aesパッケージが役立つかもしれませんが、パスワードを秘密にしておくという問題を、キーを秘密にしておくという別の問題と交換しただけです (大きな勝利ではありません)。したがって、aesがオプションである唯一の実行可能なケースは 3.

上記のケース 3 のように、機密データを可逆的に保存する必要があるとします。

AESにはいくつかの可能な操作モードがECBあります。Tcllib パッケージはand のみをサポートし、 (デフォルトである) のみが実際に使用するオプションです。モードを使用してはいけない理由の例については、ウィキペディアを参照してください。CBCOFBGCMCTRECBCBCCBCECB

実際の質問に戻ります。

初期化ベクトル (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 の問題について読んでください)。

最後に: あなたが暗号化アルゴリズムの初心者である場合は、何を保護したいのか、何を保護する必要があるのか​​を必ず理解してください。多くの落とし穴があります。

于 2016-03-03T19:39:11.693 に答える