
対称鍵アルゴリズム[ a ]は、平文の暗号化と暗号文の復号化の両方に同じ暗号鍵を使用する暗号化アルゴリズムです。鍵は同一である場合もあれば、2つの鍵の間で単純な変換が行われる場合もあります。[ 1 ]実際には、鍵は2つ以上の当事者間で共有される秘密を表し、プライベートな情報リンクを維持するために使用できます。[ 2 ]両方の当事者が秘密鍵にアクセスできる必要があることは、非対称鍵暗号化(公開鍵暗号化とも呼ばれる)と比較した場合、対称鍵暗号化の主な欠点の1つです。 [ 3 ] [ 4 ]ただし、対称鍵暗号化アルゴリズムは通常、大量暗号化に適しています。ワンタイムパッドを除いて、鍵のサイズが小さいため、ストレージ容量が少なく、伝送が速くなります。このため、非対称鍵暗号化は、対称鍵暗号化の秘密鍵を交換するためによく使用されます。[ 5 ] [ 6 ] [ 7 ]
対称鍵暗号化では、ストリーム暗号またはブロック暗号のいずれかを使用できます。[ 8 ]
ストリーム暗号は、メッセージの数字(通常はバイト)または文字(置換暗号の場合)を一度に1つずつ暗号化します。例としてChaCha20があります。置換暗号はよく知られた暗号ですが、頻度表を使用して簡単に復号できます。[ 9 ]
ブロック暗号は、複数のビットをまとめて暗号化し、平文をブロックサイズの倍数になるようにパディングします。 2001年12月にNIST(米国国立標準技術研究所)によって承認されたAdvanced Encryption Standard(AES)アルゴリズムは、128ビットのブロックを使用します。
一般的な対称鍵暗号アルゴリズムの例としては、Twofish、Serpent、AES (Rijndael)、Camellia、Salsa20、ChaCha20、Blowfish、CAST5、Kuznyechik、RC4、DES、3DES、Skipjack、Safer、IDEAなどがあります。[ 10 ]
対称暗号は、暗号化以外にも、他の暗号プリミティブを実現するためによく用いられる。
メッセージを暗号化しても、暗号化中に内容が変更されないことが保証されるわけではありません。そのため、受信者が暗号文の変更を確実に認識できるように、暗号文にメッセージ認証コードを追加することがよくあります。メッセージ認証コードは、 AEAD暗号(例:AES-GCM)から構築できます。
しかし、対称暗号は、追加の当事者を関与させない限り、否認防止の目的で使用することはできません。 [ 11 ] ISO/IEC 13888-2規格を参照してください。
別の応用例として、ブロック暗号からハッシュ関数を構築する方法があります。そのような方法のいくつかについては、「一方向圧縮関数」を参照してください。
現代のブロック暗号の多くは、ホルスト・ファイステルが提唱した構成に基づいている。ファイステルの構成を用いることで、それ自体は可逆でない関数から可逆な関数を構築することが可能になる。
対称暗号は、歴史的に既知平文攻撃、選択平文攻撃、差分暗号解読、線形暗号解読に対して脆弱でした。各ラウンドの関数を慎重に構築することで、攻撃が成功する可能性を大幅に減らすことができます。また、鍵長や暗号化プロセスのラウンド数を増やすことで、攻撃に対する保護を強化することも可能です。ただし、これは処理能力を高め、システムが実行する必要のある演算量が増えるため、処理速度を低下させる傾向があります。[ 12 ]
現代の対称鍵暗号アルゴリズムのほとんどは、ポスト量子暗号の脅威に対して耐性があるように見える。[ 13 ]量子コンピュータは、これらの暗号を解読できる速度を指数関数的に増加させるだろう。特に、グローバーのアルゴリズムは、総当たり攻撃に従来必要とされていた時間の平方根を取ることになるが、これらの脆弱性は鍵長を2倍にすることで補償できる。[ 14 ]例えば、128ビットのAES暗号は、このような攻撃に対して安全ではない。なぜなら、すべての可能な反復をテストするのに必要な時間が10京年以上から約6か月に短縮されるからである。対照的に、量子コンピュータが256ビットのAES暗号を解読するのにかかる時間は、従来のコンピュータが128ビットのAES暗号を解読するのにかかる時間と同じである。[ 15 ]このため、AES-256は「量子耐性」であると考えられている。[ 16 ] [ 17 ]
共通鍵暗号方式では、メッセージの送信者と受信者の両方が同じ秘密鍵を持っている必要があります。初期の暗号システムはすべて、送信者または受信者のいずれかが、物理的に安全なチャネルを介してその秘密鍵のコピーを受け取る必要がありました。
現代の暗号システムのほぼすべては、依然として内部的に対称鍵アルゴリズムを使用してメッセージの大部分を暗号化していますが、Diffie-Hellman鍵交換やその他の公開鍵プロトコルを使用して、セッション/会話ごとに新しい秘密鍵について安全に合意することで、物理的に安全なチャネルの必要性を排除しています(前方秘匿性)。
鍵転送に非対称暗号を使用する場合、擬似乱数鍵生成器はほぼ常に対称暗号セッション鍵の生成に使用されます。しかし、これらの生成器またはその初期化ベクトルにランダム性が欠けていると致命的であり、過去には暗号解読による破綻につながっています。したがって、実装では初期化に高エントロピー源を使用することが不可欠です。[ 18 ] [ 19 ] [ 20 ]
相互暗号とは、暗号システムに平文を入力して暗号文を取得するのと同様に、同じ場所に暗号文を入力して平文を取得できる暗号のことです。相互暗号は、自己相互暗号とも呼ばれます。[ 21 ] [ 22 ]
事実上すべての機械式暗号機は、入力された各文字に対して数学的な逆算を行う相互暗号を実装しています。暗号化用と復号用の2種類の機械を設計する代わりに、すべての機械を同一にして、同じ方法で設定(鍵付け)することができます。[ 23 ]
相互暗号の例としては、以下のようなものがある。
現代の暗号の大部分は、相互XOR暗号結合器を使用するストリーム暗号か、各ラウンドで相互変換を行うフェイステル暗号またはライ・マッセイ方式を使用するブロック暗号のいずれかに分類できます。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)発生器 (RNG) は、暗号化の安全な使用において一貫して弱いリンクです。