インターネット上のすべての機密活動には暗号化が必須です。サーバー通信はデータストレージと同じくらい安全でなければなりません。
秘密通信の科学である暗号技術こそが、この課題に対する答えです。「暗号」という言葉の語源は、ギリシャ語の「crypto」(「隠された」または「秘密」)と、描画、書き込み、または記述のプロセスまたは形式を表す「Graphy」に由来します。
オンライン賭博とインターネットセキュリティのニーズの高まりにより、暗号化は多面的なテーマになりました。暗号化をプロセスまたはアルゴリズムとして使用して秘密にすることは、暗号化の機能の1つにすぎません。さらに、暗号化は、盗聴者、選択平文攻撃、選択暗号文攻撃から保護できる必要があり、さらに次のようなことを保証できる必要があります。
機密保持: 秘密を保持する意図として定義されます。
誠実さ: データが破損していないことを確認する方法。
認証: 通信しているデバイスが実際にそのデバイスであると主張しており、第三者の攻撃者によるものではないことを証明する方法。
承認: 何かを行うための許可を適切に割り当てること。
現代の暗号は2世紀以降に開発されました。と 世界大戦。1949年、クロード・シャノンは理論的セキュリティの背後にある情報を概念化しました。彼の基本的な考えは、暗号文は平文に関する情報を一切明らかにしてはならないというものでした。数学では、次のように書きます。
シャノンの「完璧な秘密」
∀ メッセージm 0 とm 1 ϵ M (すべてのメッセージの空間) 例えば長さ(m 0) = 長さ(m 1) と ∀ c ϵ C (すべての暗号文の空間)
Pr[E(k, m 0) = c] = Pr[E(k,m 1) = c]
ここでkはK(すべてのキーの空間)内で均一である。
言い換えれば、与えられた暗号文では、攻撃者は暗号化されたメッセージがmであるかどうかを判断することができない。 0 またはm 1 あらゆる可能なm 0 とm 1 メッセージは暗号化されているため、最も強力な敵であっても暗号文から平文の内容を知ることはできず、したがって暗号文攻撃は不可能です。
私たちのデジタル世界では、暗号化はコンピューターで実行されます。XORロジック関数は、次の定理によって表現される重要な特性を持つため、暗号化アルゴリズムの基本的な構成要素となります。
Yが {0,1} n 上のランダム変数であり、Xが {0,1} n 上の独立一様変数である場合、Z = Y XOR Xは {0,1} n上の一様変数である。
これにより、20世紀半ばまで使用されていた方法の弱点であった頻度分析が防止されます。
ワンタイムパッドアルゴリズム
ワンタイム パッド (OTP) は、メッセージmとキーk (mとkの長さは同じ) を受け取り、mとkのXORをとるアルゴリズムです。kは均一変数であるため、Zも均一変数であり、盗聴者は暗号文攻撃を実行できません。残念ながら、完全な秘密性を得るには、キーがメッセージよりも長くなければなりません (|K| > |M|)。これは実際にはほぼ不可能です。実際、同じキーkを持つ2つの暗号化されたメッセージを取得した場合、これらの2つの暗号テキストをXORすると、m1 XOR m2, となり、この結果に対する簡単な統計分析により、プレーンテキストに関する多くの情報を発見できるようになります。
OTPを実用的にするために、ランダム キーは、以前に生成されたすべてのキーを知っている場合、新しいキーを発見できる確率はごくわずか (≤1/280) であるという前提で、「疑似ランダム」キーに置き換えられます。 さらに、シャノンの完全秘密性を説明するために使用される完全な等価性の代わりに、2つの暗号文が区別できない分布を持つ場合に意味的セキュリティがあると言うので、ここでも確率について話していることになります。キー生成は優れたセキュリティの基礎です。WEPプロトコルが示したように、キーの選択を誤るとセキュリティが破壊されます。
WEPは、IV (初期ベクトル) の長さが24ビットであるため安全ではありません。つまり、同じキーが約1600万フレームごとに1回使用されることになります。また、キーは関連しており、フレーム1のキーは1||k、フレーム2のキーは2||kでした。さらに、IVは電源サイクル後に0にリセットされるため、攻撃者はわずか40,000フレーム後にレイを回復することができ、これは今日の環境ではまったく安全ではありません。この弱点を克服するには、ネットワーク トラフィックにおいて、セッションごとに新しいキーをネゴシエートする必要があります。最新のストリーム暗号では、シード + ノンス (特定のキーの重複しない値) を使用してキーが生成され、ペア (シード、ノンス) が複数回使用されることはありません。これらのストリーム暗号の中で最も有名なのは、RC4、Salsa、またはSosemanukです。
OTPはネットワーク内の通信には適していますが、データの保存には適していないことに注意してください。実際、OTPは柔軟性があるため整合性がありません。つまり、暗号文の変更は検出されず、プレーンテキストに予測可能な影響を与えます。
ブロック暗号
ブロック暗号は暗号化に対する別のアプローチです。実装はストリーム暗号よりも複雑で低速ですが、より堅牢であり、ストリーム暗号が抱える課題を解決することができます。ストリーム暗号とは異なり、ブロック暗号はnビットの固定ブロックであり、これをスクランブルしてnビットの暗号テキストを作成します。メッセージがnビット未満の場合、メッセージをパディングしてnビットに達する必要があります。AESとRSAは最も一般的なブロック暗号暗号化です。
ブロック暗号には、CBC (Cipher Block Chaining) モードとCTR (Counter) モードの2つの動作モードがあります。各モードでは暗号化を開始するためにIV (Initial Vector) が必要ですが、実装は異なります。CBCモードは、並列実装のCTRモードとは異なり、シリアル実装です。
ここではCBCモードによる暗号化が行われます。ランダムなIVが選択され、各ブロックの出力が次のブロックの暗号化に使用されます。
ここでは、CTRモードによる暗号化が使用されています。Fは疑似ランダム関数であり、IVはメッセージごとにランダムで、ブロックごとに増加します。Fは各ブロックに並列に適用できます。
これらの方法はすべて盗聴や機密保持に対しては効果的ですが、整合性、認証、およびアクティブな攻撃に対する保護を保証できるものはまだありません。
メッセージ認証コード
メッセージの整合性はMAC (メッセージ認証コード) に基づいています。タグは、メッセージmとキーkに基づいて生成されます。受信者がメッセージを受け取ると、出力がyesまたはnoであるタグ検証を実行できます。MAC計算ではPRF (疑似ランダム関数) が使用されるため、攻撃者は新しいメッセージに対して有効なタグを生成することはできません。整合性には秘密鍵が必要であり、ランダムで悪意のないエラーを検出するために設計されたCRC (巡回冗長コード) と混同する必要はありません。
ストリーム暗号とブロック暗号は機密性を構築します (つまり、盗聴に対しては有効ですが、アクティブな攻撃に対しては有効ではありません)。また、MACは整合性を保証しますが、機密性は保証しません。しかし、暗号テキストに対してMACを実行すると、認証された暗号化が実現されます。攻撃者は適切に復号できる新しい暗号文を作成することはできません。その後、整合性、認証、承認を実行できます。
これらの方法はすべて、送信者と受信者に同じキーを使用するため、対称暗号化と呼ばれます。通信を開始する前に鍵を交換することを想定していましたが、今日のインターネット接続された世界では、多くの人がお互いを知らずにデータを交換する必要があるため、最初に鍵を交換することはできません。非対称暗号化はこのジレンマを解決するものです。Diffie-Hellmanプロトコルは次のことを説明するのに役立ちます。
pが大きな素数の場合、gは{1,…,p}で、xは{1,…、p-1} の場合、結果がわかっていても、xを計算する効率的なアルゴリズムは知られていません。次に、2つの数値xとyを使用して指数演算を実行してキーを取得するのは非常に簡単ですが、その演算を逆にしてキーを見つけるのは非常に困難です。
g^(x^y ) (mod p)=g^(y^x ) (mod p)= g^xy (mod p) = 暗号化に使用するキー
アリスとボブが鍵を共有したいが、その間に盗聴者がいる場合、鍵を共有するために次の手順を実行します。

Diffie-Hellmanの変種もいくつかあり、たとえば、 y² = x³ + ax + bの形式での楕円曲線の解法などがあります。
結局のところ、これらすべての努力にもかかわらず、安全に通信できる保証された方法は存在しません。シャノンの定理は理論的な観点からは完璧なセキュリティを証明していますが、実際にはサイドチャネル攻撃は非常に強力になる可能性があります。サイドチャネル攻撃の最も優れた例の1つは、2013年に研究者が4096ビットのRSAアルゴリズムを解読する際にコンピューターのCPUが発する高周波音 (10 ~ 150 kHz) を聞くことで世界で最も強力な暗号を解読したときでした。ダニエル・ゲンリン、アディ・シャミール、エラン・トロマーは、予測不可能なこのタイプの未知の要素を使って復号鍵を作成することができました。