暗号化、ハッシュ、ソルティングはすべて関連する手法ですが、これらのプロセスにはそれぞれ異なる目的に役立つプロパティがあります.
要するに, 暗号化には、キーを持っている人だけがアクセスできるようにデータをエンコードすることが含まれます. これにより、権限のない者から保護されます.
暗号化ハッシュには、元に戻せない計算が含まれます. これらの関数には、デジタル署名やその他の形式の認証に役立つ特別なプロパティがあります.
ソルティングでは、暗号化ハッシュ関数を使用する前にランダムデータを追加します. 主に保存中にパスワードを安全に保つために使用されますが、他の種類のデータでも使用できます.
暗号化とは?
簡単に言えば, 暗号化とは、コードを使用して他者が情報にアクセスできないようにするプロセスです. データが暗号化されると、キーを持っている人だけがそれにアクセスできます。十分に複雑なシステムが使用され、正しく使用されている限り、攻撃者はデータを見ることはできません。.
データは、暗号化とも呼ばれる暗号化アルゴリズムで暗号化されます。暗号化とハッシュの最も重要な違いの1つ(後で説明します)は、暗号化が両方の方向に進むように設計されていることです。これは、何かがキーで暗号化されたら、解読することもできることを意味します.
これにより、情報を安全に保存または転送するなど、さまざまな状況で暗号化が便利になります。. データが適切に暗号化されると、データは安全であると見なされ、キーを持っている人だけがアクセスできます. 最もよく知られているタイプは対称キー暗号化で、暗号化プロセスと復号化プロセスの両方で同じキーを使用します.
公開鍵暗号化は、データを暗号化するために1つの公開鍵が使用され、その対応する秘密鍵がデータを復号化するために使用されるため、少し複雑です。この機能により、一度も会ったことのない人でも安全にコミュニケーションできます。公開鍵暗号化は、データおよびメッセージの信頼性と整合性を検証するために使用されるデジタル署名の重要な部分でもあります.
こちらもご覧ください: 一般的な暗号化タイプの説明
一般的な暗号化アルゴリズム
- シーザー暗号– これは、各文字が固定の数だけシフトされる単純なコードです。シーザー暗号のシフトが3の場合、すべての「a」は「d」になり、すべての「b」は「e」になり、すべての「c」は「f」になります。スキームを使用した最初の記録者であったジュリアス・シーザーにちなんで名付けられました.
- AES – Advanced Encryption Standardは、現代の通信の大部分を保護する複雑な対称キーアルゴリズムです。多くの洗練された手順が必要で、多くの場合、TLS、メッセージングアプリ、保存中、および他の多くの状況でデータを暗号化するために使用されます。ここでは、AES暗号化について詳しく説明します.
- 3DES –トリプルDESは、DESアルゴリズムに基づいています。コンピューターのパワーが増大してDESが安全でなくなったとき、3DESは強化されたアルゴリズムとして開発されました。 3DESでは、データはDESアルゴリズムを1回ではなく3回実行されるため、解読が困難になります。 3DESはAESと同じものの多くに使用できますが、特定の実装のみが安全と見なされます.
- RSA – Rivest-Shamir-Adleman暗号は、広く使用されている公開鍵暗号の最初の形式でした。これにより、エンティティは、キーを交換していないか、または交換する機会がなくても安全に通信できます。 PGPやTLSなど、さまざまなセキュリティプロトコルで使用できます。 RSA暗号化の詳細なガイドはこちらにあります.
- ECDSA –楕円曲線デジタル署名アルゴリズムは、楕円曲線暗号を使用するDSAの変形です。公開鍵アルゴリズムとして、同様の状況でRSAに適用できますが、セキュリティ上の問題があるため、あまり一般的ではありません.
実行中の暗号化
暗号化が実際にどのように機能するかを知るために、例としてシーザー暗号を使用します。メッセージを暗号化する場合 “食べましょう」の3つのシフトで、L」になりますO」、「e」になりますh” 等々。これにより、次の暗号化されたメッセージが得られます。
Ohw’v hdw
メッセージを復号化するには、受信者は暗号化アルゴリズムに3つのシフトが含まれていることを知ってから、各文字を3桁ずつロールバックする必要があります。必要に応じて、各文字を異なる数字だけシフトすることでコードを変更できます。さらに高度なアルゴリズムを使用することもできます.
1つの例はAESです。 128ビットのAESオンライン計算機を使用して「食べましょう」キーを「1234」、それは私たちに与えます:
FeiUVFnIpb9d0cbXP / Ybrw ==
この暗号文は、「1234」。より複雑なキーを使用してプライベートに保つ場合、攻撃者からデータを保護することを検討できます。.
ハッシュとは?
暗号化ハッシュ関数は特殊な一方向計算です. これらは、任意のサイズのデータ文字列を受け取り、常に所定の長さの出力を提供します。この出力は ハッシュ, ハッシュ値 または メッセージダイジェスト. これらの関数はキーを使用しないため、指定された入力の結果は常に同じです.
入力がすべてであるかどうかは関係ありません 戦争と平和 または単に2文字, ハッシュ関数の結果は常に同じ長さになります. ハッシュ関数には、便利ないくつかの異なるプロパティがあります。
- それらは一方向関数です –これは、元の入力が特定のハッシュ値から何であったかを把握する実用的な方法がないことを意味します.
- 2つの入力が同じハッシュ値を持つことはまずありません – 2つの異なる入力が同じハッシュ値を生成する可能性はありますが、この可能性は非常に小さいので、心配する必要はありません。実用的には、ハッシュ値は一意と見なすことができます.
- 同じ入力は常に同じ結果をもたらします– 特定のハッシュ関数に同じ情報を入力するたびに、常に同じ出力が配信されます.
- わずかな変更でもまったく異なる結果が得られます– 1文字でも変更された場合、ハッシュ値は大きく異なります.
ハッシュは何に使用されますか?
ハッシュ関数にはいくつかの興味深いプロパティがありますが、実際にそれらを使用して何ができますか?任意の長さの入力に対して一意の固定サイズの出力を吐き出すことができるのは、あいまいなパーティートリックにすぎないように思えるかもしれませんが、ハッシュ関数には実際には多くの用途があります.
彼らはのコアコンポーネントです デジタル署名, これは、インターネット上で信頼性と整合性を検証する重要な側面です. ハッシュメッセージ認証コード (HMAC)もハッシュ関数を使用して同様の結果を達成します.
暗号化ハッシュ関数は、通常のハッシュ関数としても使用できます。これらのシナリオでは、データの整合性を検証するチェックサム、重複データを排除するフィンガープリントアルゴリズム、またはデータにインデックスを付けるハッシュテーブルを作成することができます。.
一般的な暗号化ハッシュ関数
- MD5 –これは、Ron Rivestによって1991年に最初に公開されたハッシュ関数です。現在は安全ではないと見なされており、暗号化の目的で使用すべきではありません。それにもかかわらず、データの整合性をチェックするために使用することができます.
- SHA-1 –セキュアハッシュアルゴリズム1は1995年から使用されていますが、多くの衝突攻撃が成功した2005年から安全であるとは見なされていません。代わりにSHA-2またはSHA-3を実装することをお勧めします.
- SHA-2 –これは、SHA-1の後継として機能するハッシュ関数のファミリーです。これらの機能には数多くの改善が含まれており、さまざまなアプリケーションで安全に機能します。それにもかかわらず、SHA-256およびSHA-512は長さ延長攻撃に対して脆弱であるため、SHA-3を実装することが最適な特定の状況があります.
- SHA-3 – SHA-3はSecure Hash Algorithmファミリの最新のメンバーですが、その前身とはまったく異なる方法で構築されています。この段階では、SHA-2はまだ置き換えられていませんが、特定の状況でセキュリティを向上させることができる別のオプションを暗号作成者に提供するだけです。.
- RIPEMD – RIPEMDは、学術コミュニティによって開発された別の機能ファミリです。 MD4(MD5の前身)のアイデアの多くに基づいており、特許によって制限されていません。 RIPEMD-160はまだ比較的安全であると考えられていますが、それほど広く採用されていません。.
- ワールプール – Whirlpoolは、正方形ブロック暗号ファミリのハッシュ関数です。 AESの修正に基づいており、特許の対象ではありません。安全であると考えられていますが、他の選択肢よりもやや遅いため、採用が制限されています.
アクションのハッシュ関数
ハッシュ関数が何であるかを理解したので、今度はそれらを実行に移します。同じテキストを「食べましょう」をSHA-256オンライン計算機に追加すると、次のことがわかります。
5c79ab8b36c4c0f8566cee2c8e47135f2536d4f715a22c99fa099a04edbbb6f2
1文字でも1つの位置で変更すると、ハッシュ全体が大幅に変更されます。 「食べよう」とまったく異なる結果が得られます。
4be9316a71efc7c152f4856261efb3836d09f611726783bd1fef085bc81b1342
暗号化とは異なり、このハッシュ値を関数に逆向きに通して入力を再度取得することはできません。これらのハッシュ関数は暗号化と同じ方法で使用することはできませんが、その特性により、デジタル署名や他の多くのアプリケーションの重要な部分になります.
ハッシュ関数とパスワード
ハッシュ関数には、まだ説明していない別の一般的な用途があります。彼らはまたの重要なコンポーネントです 保存中にパスワードを安全に保つ.
おそらく、パスワード付きの多数のオンラインアカウントを持っています。これらのアカウントごとに、パスワードをどこかに保存する必要があります。ウェブサイトにパスワードのコピーがない場合、どのようにログインを確認できますか?
FacebookやGoogleなどの企業は、数十億のユーザーパスワードを保存しています。これらの企業がパスワードをプレーンテキストとして保持している場合、パスワードデータベースに侵入できる攻撃者は、見つけたすべてのアカウントにアクセスできます。.
これは、会社とそのユーザーの両方にとって重大なセキュリティ障害となります。すべてのパスワードが攻撃者にさらされると、すべてのアカウントとユーザーデータが危険にさらされます。.
これを防ぐ最善の方法は パスワード自体を保存せず、代わりにパスワードのハッシュ値を保存する. 前のセクションで説明したように、暗号化ハッシュ関数は一方向に動作し、元に戻すことが不可能な固定サイズの出力を生成します.
組織がパスワード自体ではなくパスワードのハッシュを保存している場合、ユーザーがログインするときに2つのハッシュが一致することを確認できます。ユーザーはパスワードを入力し、ハッシュされます。このハッシュは、データベースに保存されているパスワードハッシュと比較されます。 2つのハッシュが一致する場合、正しいパスワードが入力され、ユーザーにアクセスが許可されます.
このセットアップは パスワードを保存する必要はありません. 攻撃者がデータベースに侵入した場合、見つけるのはパスワードではなくパスワードハッシュだけです.
ストレージ用のパスワードをハッシュしても、攻撃者がハッシュを使用してパスワードを把握することを防ぐことはできませんが、攻撃者の作業は非常に困難で時間がかかります。これにより、最後のトピックである塩漬けが表示されます.
塩漬けとは?
塩漬けは本質的に ハッシュ関数を使用する前のランダムデータの追加, そして、それらはパスワードで最も一般的に使用されます.
塩を使用して説明する最良の方法は、そもそも塩が必要な理由を議論することです。パスワードのハッシュを保存することですべての問題を解決できると思っていたかもしれませんが、残念ながら、それよりも少し複雑です.
弱いパスワード
多くの人が本当に悪いパスワードを持っています。あなたもそうかもしれません。問題は、人間は予測可能なパターンで考え、覚えやすいパスワードを選択する傾向があることです。これらのパスワードは辞書攻撃に対して脆弱です。辞書攻撃は、アカウントの正しいパスワードを見つけるために、最も一般的なパスワードの組み合わせを毎秒数千から数百万回繰り返します。.
代わりにパスワードハッシュが保存されている場合、状況は少し異なります。攻撃者がパスワードハッシュのデータベースを見つけた場合、次のいずれかを使用できます。 ハッシュテーブル または レインボーテーブル パスワードを見つけるために使用できる一致するハッシュを検索する.
ハッシュテーブルは、データベースに格納されている一般的なパスワードのハッシュの事前計算済みリストです。事前に多くの作業が必要になりますが、テーブルが完成すると、可能なパスワードごとにハッシュを計算するよりも、テーブル内のハッシュを検索する方がはるかに高速です。別の利点は、これらのテーブルを繰り返し使用できることです.
レインボーテーブルはハッシュテーブルに似ていますが、より多くの計算能力を犠牲にしてより少ないスペースを占有する点が異なります.
弱いパスワードを使用すると、これらの攻撃方法はどちらもはるかに実用的になります。. ユーザーが共通のパスワードを持っている場合、パスワードのハッシュはハッシュテーブルまたはレインボーテーブルにある可能性があります。この場合、攻撃者がユーザーのパスワードにアクセスできるようになるのは時間の問題です.
ユーザーは、テーブルに格納される可能性がはるかに低い、より長く複雑なパスワードを選択することにより、これらの攻撃を阻止するのに役立ちます。実際には、ユーザーは覚えやすいパスワードを選択する傾向があるため、これは必要なほど近くでは発生しません。おおまかな目安として、覚えやすいものは攻撃者が見つけやすいことが多い.
塩は、この問題を回避する別の方法を提供します。ハッシュされる前にランダムなデータの文字列をパスワードに追加することにより、本質的にそれをより複雑にし、これらの攻撃が成功する可能性を妨げます.
塩漬けの実際の仕組み
例として、メールアカウントを持ち、パスワードが「1234」。 SHA-256オンライン計算機を使用すると、ハッシュ値として次のものが取得されます。
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
このハッシュは、アカウントのデータベースに保存されるものです。 「」のパスワードを入力すると1234」、ハッシュされ、値が保存された値と比較されます。 2つの値は同じであるため、アクセスが許可されます.
攻撃者がデータベースに侵入した場合、攻撃者はこの値と、そこにあった他のすべてのパスワードハッシュにアクセスできます。次に、攻撃者はこのハッシュ値を取得し、事前に計算されたハッシュテーブルまたはレインボーテーブルで検索します。以来 「1234」は最も一般的なパスワードの1つであり、一致するハッシュを非常に迅速に見つけます.
ハッシュテーブルは次のことを伝えます。
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
に対応:
1234
攻撃者は、パスワードが「1234」。その後、このパスワードを使用してアカウントにログインできます.
ご覧のとおり、これは攻撃者にとってそれほど大きな作業ではありませんでした。物事をより難しくするために、ハッシュされる前にランダムなデータの塩をパスワードに追加します。塩漬けは、ハッシュテーブルとレインボーテーブルが肯定的な結果を返す可能性を大幅に減らすのに役立ちます.
ランダムデータの16文字のソルトを見てみましょう。
H82BV63KG9SBD93B
単純なパスワード「1234” そのようです:
1234H82BV63KG9SBD93B
それをソルトしたので、以前と同じハッシュ関数を使用して、次の結果を返します。
91147f7666dc80ab5902bde8b426aecdb1cbebf8603a58d79182b750c10f1303
確かに、このハッシュ値は以前のものより長くも複雑でもありませんが、それはポイントではありません。両方とも同じ長さですが、1234H82BV63KG9SBD93B」は一般的なパスワードではないため、そのハッシュがハッシュテーブルに保存される可能性ははるかに低くなります。.
パスワードがハッシュテーブルに格納される可能性が低いほど、攻撃が成功する可能性は低くなります。これは、塩を追加することでパスワードハッシュをより安全にする方法です。.
データベース全体のハッキング
攻撃者がパスワードハッシュのデータベース全体にアクセスできる場合、各エントリに対してすべてのハッシュをテストする必要はありません。代わりに、ハッシュテーブルと一致する一致をデータベース全体で検索できます. データベースが十分に大きい場合、攻撃者は膨大な数のアカウントを侵害できます, 成功率が5%であっても.
ハッシュされる前にパスワードに一意のソルトが与えられている場合、これはプロセスをはるかに複雑にします。塩が十分に長い場合、成功の可能性ははるかに低くなります。 一致するハッシュを見つけることができるように、ハッシュテーブルとレインボーテーブルを非常に大きくする.
saltのもう1つの利点は、同じデータベース内の複数のユーザーが同じパスワードを持っている場合、または1人のユーザーが複数のアカウントで同じパスワードを持っている場合です。パスワードハッシュが事前にソルト処理されていない場合、攻撃者はハッシュを比較し、同じハッシュ値を持つアカウントも同じパスワードを共有していると判断できます.
これにより、ハッカーは最も一般的なハッシュ値を標的にして、最大の報酬を得やすくなります。パスワードが事前にソルト処理されている場合、同じパスワードが使用されている場合でもハッシュ値は異なります.
潜在的な塩の弱点
塩漬けは、正しく行わないと効果が失われます。最も一般的な2つの問題は、次の場合に発生します。 塩が短すぎる、または塩がパスワードごとに一意でない場合. より短いソルトは、結果のハッシュを十分に希少にしないため、レインボーテーブル攻撃に対して依然として脆弱です。.
ハッシュ化されたパスワードごとにソルトが再利用され、ソルトが検出された場合、データベース内の各パスワードを簡単に把握できます。同じソルトを使用することは、同じパスワードを持つ誰もが同じハッシュを持つことを意味します.
一般的なソルティングアルゴリズム
パスワードの保存に通常のハッシュ関数を使用することはお勧めしません。代わりに、セキュリティを強化するのに役立つ特定の機能を備えた多くの機能が設計されています。これらには、Argon2、scrypt、bcrypt、およびPBKDF2が含まれます.
アルゴン2
Argon2は、2015年のパスワードハッシュコンペティションで優勝しました。アルゴリズムに関してはまだ比較的新しいものですが、パスワードをハッシュするための最も信頼できる機能の1つになりました.
その若さにもかかわらず、これまでのところ、弱点を調査した多くの研究論文でそれを保持しています。 Argon2は他のパスワードハッシュアルゴリズムよりも柔軟性があり、さまざまな方法で実装できます。.
暗号化する
発音された「ess crypt」、これは一般的に使用されている2番目に新しいパスワードハッシュアルゴリズムです。 2009年に設計されたscryptは、計算に大量かつ調整可能なメモリを使用します。その調整可能な性質は、時間の経過とともにコンピューティング能力が増大した場合でも、攻撃に耐えることができることを意味します.
暗号化
bcryptは1999年に開発され、Blowfish暗号に基づいています。これは、長年にわたってパスワードハッシュで使用されるアルゴリズムに最も一般的に依存していたものの1つでしたが、現在ではField-Programmable Gate Array(FPGA)に対してより脆弱です。これが、Argon2が新しい実装でしばしば好まれる理由です.
PKFD2
このキー派生関数は、短くて安全性の低いキー長のPBKDF1を置き換えるために開発されました。 2023年のNISTガイドラインでは、パスワードのハッシュにPKFD2が推奨されていますが、Argon2はセキュリティ上の問題のいくつかに対処しており、多くの状況でより良いオプションになる可能性があります.
暗号化、ハッシュ、ソルティング:まとめ
暗号化、ハッシュ、ソルティングの詳細を確認したので、重要な相違点をすぐに確認して、それらが収まるようにします。これらのプロセスはそれぞれ関連していますが、それぞれ異なる目的を果たします.
暗号化は、情報をエンコードして保護するプロセスです. データが暗号化されると、正しいキーを持っている人だけがデータを復号化してアクセスできます。暗号化アルゴリズムはリバーシブルです。これにより、データを攻撃者から遠ざけることができますが、必要なときにアクセスできます。オンラインでの安全を確保するために広く使用されており、データの保存時および転送中にデータを安全に保つ多くのセキュリティプロトコルで重要な役割を果たしています。.
対照的に, ハッシュは一方向のプロセスです. 何かをハッシュ化するとき、元の形式に戻すことはできません。暗号化ハッシュ関数には多くのユニークなプロパティがあります データの信頼性と整合性を証明できる, デジタル署名やメッセージ認証コードなどを通じて.
特定の種類の暗号化ハッシュ関数も、パスワードの保存に使用されます。パスワード自体の代わりにパスワードのハッシュを保存すると、セキュリティがさらに強化されます。これは、攻撃者がデータベースへのエントリを取得した場合、すぐにパスワードにアクセスできないことを意味します.
パスワードハッシュはハッカーにとって生活をより困難にしますが、それでも回避することができます。これが塩漬けの出番です. ソルティングは、ハッシュされる前にパスワードに追加データを追加します, これにより、攻撃の時間とリソースが大量に消費されます。ソルトとパスワードが正しく使用されている場合、ハッシュテーブルとレインボーテーブルは非現実的な攻撃手段になります。.
一緒に、暗号化、ハッシュ、ソルティングはすべて私たちをオンラインで安全に保つための重要な側面です。これらのプロセスが整っていない場合、攻撃者はアカウントとデータを自由に利用できるため、インターネット上でセキュリティを確保できなくなります.
テクノロジー-1 tec_estrombergの下で CC0