B2
非対称暗号化の概要
以前の従来の暗号化アルゴリズムはすべて対称暗号化です。これは、暗号化と復号化にキーを使用することを意味します。非対称暗号化では異なるキーが使用され、暗号化の複雑さはより高くなります。
Diffie-Hellman 鍵交換方式
鍵交換の方式の一つ。
コモンはパブリックの基本カラー、シークレットは自分のプライベートカラーで、パブリックカラーと自分のプライベートカラーを混ぜて相手に渡し、相手も自分のプライベートカラーと混ぜて、お互いに共通の秘密の色。誰かがそれを真ん中で横取りした場合、鍵の色はわかりませんが、彼が手に入れたのはオレンジと緑です。たとえ2つの色を混ぜても、同じ茶色にはなりません。
Diffie-Hellman の具体的な実装は、元のルートを介して行われます。まず、いくつかの知識を追加しましょう。
整数論で習ったのですが、とても単純なことです。たとえば、13 mod 12 =1 です。
原始ルート 原始ルート: if
この場合、a は p の原始根になります。
たとえば、下の図では、7 は 71 の元のルートですが、8 はそうではなく、重複があります。
Diffie-Hellman の場合、黄色 (共通) には a と p が含まれます。a は p の原始根です。
アリスの赤い秘密の色は x で、ボブの青い秘密の色は y です。
a x mod p はアリスからボブに送信される混合色情報であり、a y mod p はボブからアリスに送信されます。両方を取得した後、モジュロ演算を実行します。
(q) n mod p = q n mod pの証明は次のとおりです: DH アルゴリズム図 + 数学的証明 - CSDN ブログ
とにかく、上記の式によれば、(a x mod p) y mod p = (a y mod p) x mod p = a xy mod p となり、どちらも最終色は茶色になることがわかります。
クラック手法: 中間者攻撃、両当事者と DH 鍵合意に達し、メッセージの送受信時に両当事者の鍵合意を使用してメッセージを暗号化および復号化するアリス・ボブは実際の鍵情報を受け取っていません相手の。
トラップドアの一方向機能
一方通行のトラップドア機能。y=f(x) は計算しやすいですが、x=f -1 (y) は計算が難しく、z が分かっていれば逆関数を計算するのが便利で、z は落とし戸になります。RSA の場合、秘密キーはトラップドアです。
RSA公開鍵暗号化アルゴリズム
まず、数論の知識を追加します。
相対的に素数: 7 と 10 など、公約数 (1 を除く) を持たない 2 つの数は、必ずしも両方が素数である必要はありません。gcd (a, b) = 1
Φ(n): n と相対的に素である、n より小さい最大の数。たとえば、素数 p の場合、ϕ ( p ) = p − 1 \phi(p)=p-1ϕ ( p )=p−1 ; ϕ ( 1 ) = 1 \phi(1)=1ϕ ( 1 )=1
pq 互素,n=pq、ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1)ϕ ( n )=( p−1 ) ( q−1 )
n=p 2、ϕ ( n ) = ( p ) ( p − 1 ) \phi(n)=(p)(p-1)ϕ ( n )=( p ) ( p−1 )
合同: 数値を法として得られた剰余が同じ場合、2 つの数値は合同です。たとえば、1 4 は 3 と合同です。1≡4 法 3
オイラーの定理: an が相対的に素である場合、a ϕ ( n ) ≡ 1 ( modn ) a^{\phi(n)}≡1 (mod \quad n)あるϕ ( n )≡1 ( mod _ _n )
RSA アルゴリズム: まず、処理される平文 m ごとに、m<n になります。
この場合、公開鍵ペアは {e, n}、暗号化方式は c=m e mod n となります。
秘密鍵ペアは {d, n} で、復号化方法は m=c d mod n=m ed mod n です。
このとき、 m mod n = m ed mod nとなる ed が存在し、en と d を見つけるのは難しいことが知られています。
一般的に使用されるアルゴリズムは、2 つの大きな素数 pq と与えられた e、n=p*q、ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1) を使用するものです。 (q-1)ϕ ( n )=( p−1 ) ( q−1 ),d ≡ e − 1 mod ϕ ( n ) d≡e^{-1} mod \quad \phi(n)d≡e− 1モジュール__ϕ ( n ) ed≡ 1 mod ϕ ( n ) ed≡1 mod \quad \phi(n)えで_≡1モジュール_ _ϕ ( n )
n をこのように設定すると、なぜ m ed mod n=m mod n になるのでしょうか?
m ed mod n = m 1+k(p-1)(q-1) mod n = m(m k(p-1)(q-1) ) mod n = m*1 k mod n=m mod n 。n に選択された素数が非常に大きいため、mn は互いに素であり、オイラーの定理を満たしているようです。そうでない場合は、中国の剰余定理に基づいて証明することもできます。ここで追加する時間を無駄にするつもりはありません。もうすぐqaq試験です。
クラッキング手法:ブルートフォースクラッキング手法(遅すぎる)、素数の一部の特性に基づく数学的クラッキング手法、タイミング攻撃(入出力の操作時間に基づいて鍵情報を判断)、選択暗号文攻撃(一部の平文は暗号文に基づいて解決可能) RSA の特徴 c1*c2 mod n などの暗号文ペアは、m1 * m2 の暗号化結果です。
公開鍵暗号化の欠点: 必要な鍵の長さが長すぎる、計算が遅すぎる、長すぎる場合は ECB ブロック暗号化が必要になりますが、この方法はブロック処理方法が不足しているため、お勧めできません。
ハイブリッド暗号化 ハイブリッド暗号化
効率的な対称暗号化と複雑な対称暗号化を組み合わせます。大量のデータを送信するときに使用します。
双方が非対称暗号化キーを持っており、対称キー (セッション) を非対称な方法で送信すると仮定します。その後、両者は対称キーを使用して通信します。
証明書
暗号化: 相手の公開キーを使用して暗号化し、相手は独自の秘密キーを使用して復号化します。
署名を追加して、メッセージが自分自身によって送信されたことを確認します。メッセージを自分の秘密キーで暗号化し、相手の公開キーで復号化します。
アリスが自分の秘密鍵で署名を暗号化した後、CA 認証局は署名がアリスによって発行されたものであるかどうかを検証する方法を持ちます (CA は秘密鍵情報を保管する必要がないため、署名の作成者を検証する方法を持つことができます)。サイン)。CA 独自の秘密キー暗号化を使用して、他者による署名を検証することもできます。
情報送信のプロセス: アリスの署名 -> CA 認証はアリスの情報 -> CA 署名 -> アリスが CA の署名を認証 -> CA またはアリスがボブに情報を送信します。
認証・認可
データの整合性: データは不正な方法で変更されていません。つまり、データの改ざんや、仲介者によるデータのコピーの偽造などはすべて検出可能であり、誤り訂正はできませんが、誤りは検出できます。
ここには、機密性と信頼性の問題という興味深い通説があります。認可は単に信頼性を保証するだけです。
従来の暗号化方式が使用されている場合、データの整合性を確保する方法は次のとおりです。
- 送信側と受信側のみが情報を取得できるようにします。
- タイムスタンプで検証します。
- デバッグシリアル番号で確認します。
ただし、従来の暗号化では署名を通じて本人確認を行うことができないため、仲介者自身が情報を偽造する可能性があります。
さらに、暗号化方式は認証や認可には適していません。多くの計算が必要です。情報に認可タグを追加してブロードキャストする方がよいでしょう。さらに、多くのコンピュータ プログラムは、現在、独自の検証認可方式を備えています。暗号化が必要です。
縦方向冗長性チェック (LRC) 縦方向冗長性チェック
各ブロックの i 番目のビットを取り出し、XOR 演算してチェック コードを取得します。ランダムなデータには適していますが、予測どおりにフォーマットされたデータにはあまり適していません。
ハッシュ関数
入力は常に固定長の出力を取得し、アルゴリズムは公開されており、入力は出力を計算するのが簡単ですが、出力は入力を順番に計算するのが困難です。
-
前像抵抗: h(m)=c とすると、この c に基づいて m を見つけるのは困難です。ユーザーのパスワードをデータベースに保存するために使用できますが、データベース管理者が c を見たとき、元のパスワードが何であるかはわかりません。
-
2 番目のプリイメージ抵抗: m と h(m) が与えられると、n≠m および h(m)=h(n) を見つけるのは困難です。ソフトウェアをダウンロードした後、ハッシュ値を計算してソフトウェアの整合性を検証します。
-
衝突耐性: ハッシュ関数 h では、n≠m および h(m)=h(n) が発生しにくくなります。たとえば、ボブがアリスに 100 元貸してというメッセージを送信し、アリスがこのメッセージのハッシュに署名しますが、ボブが別のメッセージ「100,000 元貸してください」を見つけた場合、そのメッセージも「100 元貸してください」と同じハッシュ値になります。そうすれば、アリスは実際に私に10万貸してくれると約束したと言えます。このようなことが起こらないようにするため。
このように、送信者は自分のメッセージとそのメッセージのハッシュ値を送信し、受信者は完全性を検証できます(機密性は検証できません)。
擬似乱数の生成にも使用できます。
例えば、SHA1:簡単に言うと、まず512ビットの整数倍に拡張し、512ビットごとに取り出して既存のハッシュ値でハッシュ化し、それを繰り返して最終的に160ビットを取得します。ビットハッシュ値。
解決策は、総当たりクラッキングまたは暗号解析です。
プリイメージ抵抗と 2 番目のプリイメージ抵抗: 平均 2 m-1の試行が必要です。
Collision Resistance: 2 m/2 は、 Collision Resistance (衝突の可能性) の強さを表します。もちろん、生成されるハッシュ値が長いほど、衝突の可能性は低くなります。
誕生日の攻撃
誕生日の攻撃。グループ内の少なくとも 2 人の誕生日を同じにしたい場合、何人を選択すればよいですか? 非常に驚くべきことは、70 人がいると 90% の確率 (誕生日が繰り返される) になるということです。
したがって、ハッシュ値の問題については、ほとんどすべての組み合わせを試す必要はありません。たとえば、64 ビット メッセージの場合、232 個のメッセージ バリアントを作成すると、ハッシュ値が重複する可能性が高くなります。
マック
これもハッシュ アルゴリズムの 1 つで、メッセージとキーを一緒にハッシュし、メッセージに添付して相手に送信します。相手がキーを知っている場合は、メッセージ + キーを計算して mac の値が同じかどうかを確認し、異なる場合はメッセージが変更されたか、送信者が間違っていることを意味します。
一方向関数と比較すると、一方向関数はデータの整合性のみを保証でき、Mac は認証も行うことができます (キーはあなたと相手のみが知っているため、Mac が一致するということは、情報の送信者が実際にデータを共有していることも示します)。あなた)相手方)のキーを押してください。
HMAC
MAC は複数の暗号化方式に基づいており、hmac はハッシュに特化しています。また、HMAC はハッシュ関数の置き換えに非常に便利で、一部のハッシュ関数モジュールを削除 (削除) し、新しいハッシュ関数モジュールを挿入 (ドロップイン) するだけです。
デジタル署名
のために使用される:
- データの整合性と署名者の承認された身元を確認します。
- 否認防止: 署名者は送信したデータを拒否できません。
実装は MAC に似た感じで、データ情報 + 秘密パラメータ情報、署名はハッシュ アルゴリズムを通じて取得されます。