暗号化アルゴリズム キー番号の分類



Habrahabrには暗号化に関連する何らかの方法ですでに約1000の記事がありますが、特定のアルゴリズムで情報がすぐに必要な場合に状況が発生することがあります。

序文の代わりに


最初は、3つの出版物のサイクルであるはずでしたが、コメントの最初と2番目の出版物の時点で、1つの一般的な記事を作成するように頼まれました。
残念ながら、もっと時間がかかりましたが、現在、約50の暗号化アルゴリズムのリストを紹介しています。暗号化アルゴリズムの簡単な説明とその実装場所が記載されたディレクトリです。

いくつかのアルゴリズムはかなりよく知られており、いくつかは率直なエキゾチックです。 しかし、これらはまさに私にとって興味深いと思われるアルゴリズムです。 おそらくどこかで強調されているのは通常のことではないでしょう。 しかし、彼らが味と色で言うように、すべてのマーカーは異なります。 そして、専門の大学でどのような方法で研究され、どの情報が最も頻繁に必要とされたか。 簡単な学生の要約を言うために

ヘルプと編集をしてくれたapashkovaに感謝します。
フィードバックと提案を事前にありがとうございます。
UPD!
ラフターのアドバイスで、 は警告投稿します。

注意! 上記のアルゴリズムの多くは安全ではない、時代遅れなどですので、それらの使用は完全にあなたの良心にとどまります。 将来的には、分類の最終決定時に、安全性またはその欠如を示すメモが各アルゴリズムに直接追加されます。

宇宙船の類型化


そこで、よく知られている暗号アルゴリズムではないものを含む記事を紹介します。 私たちは、その記事が革新的またはユニークなふりをしないことを留保します。 むしろ、クイックリファレンスとして、誰かがベッドサイドリーディングと呼ぶこともあります。 暗号化アルゴリズムには、たとえば次のようなさまざまな分類があります。


便宜上、キーの数に応じてグループに分けて使用します。

  1. キーレスKA-計算にキーを使用しないでください。
  2. 単一キーKA-1つのキーパラメーター(秘密キー)で動作します。
  3. 2キー宇宙船-作業のさまざまな段階で、2つのキーパラメータを使用します。秘密キーと公開キーです。

用語:
  • オープン(ソース)テキスト -暗号化を使用せずに送信されるデータ(必ずしもテキストではない)。
  • 暗号化テキスト、暗号化された(閉じた)テキスト -暗号システムの使用後に取得されたデータ(通常、指定されたキーを使用)。
  • キーは、指定されたテキストの特定の変換の選択を決定する暗号パラメータです。 現代の暗号では、暗号の暗号強度は完全にキーの機密性によって決まります(Kirkhoffsの原理)。
  • 暗号、暗号システム -平文から暗号化への可逆変換のファミリー。
  • 暗号化は、アルゴリズムとキーに基づいた平文の暗号変換の通常の使用のプロセスであり、暗号化されたテキストをもたらします。
  • 復号化は、暗号化されたテキストを暗号化して変換して開く通常のプロセスです。
  • 非対称暗号、2キー暗号、公開キー暗号-暗号化と復号化の2つのキーが使用される暗号。 さらに、暗号化キーのみを知っていると、メッセージを解読できません。
  • 公開鍵は、自由に配布される非対称システムの2つの鍵の1つです。 秘密の通信のための暗号化と復号化-電子署名用。
  • 秘密鍵である秘密鍵は、秘密に保持される非対称システムの2つの鍵の1つです。
  • 暗号解読は、情報の機密性と整合性を侵害する数学的方法を研究する科学です。
  • Cryptanalyst-暗号解読法を作成および適用する科学者。
  • 暗号攻撃 -攻撃を受けた安全な情報交換システムに逸脱を引き起こす暗号解読者による試み。 成功する暗号攻撃は、ハッキングまたは改ざんと呼ばれます。
  • 復号化(復号化) -既知の暗号化に基づいて暗号化キーを知らずにプレーンテキストを抽出するプロセス。 復号化という用語は、通常、暗号文の暗号解読プロセスに関連して使用されます(暗号解読自体は、一般的に言えば、暗号化されたオープンメッセージだけでなく、暗号システムの分析にも含まれます)。
  • 暗号強度は、暗号アルゴリズムが暗号解析に耐える能力です。
  • 模倣の保護 -偽情報の賦課に対する保護。 つまり、テキストは開いたままですが、誤ってまたは意図的に変更されていないことを確認することが可能になります。 通常、模倣保護は、送信されたデータのパケットに模倣を含めることによって実現されます。
  • 模造挿入 -キーとデータに応じて、模造保護に使用される情報ブロック。
  • 電子デジタル署名または電子署名は、非対称の挿入です(セキュリティキーは検証キーとは異なります)。 言い換えると、審査官が偽造できないような模造挿入物です。
  • 証明機関とは、その完全性が否定できず、公開キーが広く知られている団体です。 証明機関の電子署名により、公開キーの信頼性が確認されます。
  • ハッシュ関数は、任意の長さのメッセージを固定長の数値(「畳み込み」)に変換する関数です。 暗号化ハッシュ関数(汎用ハッシュ関数とは対照的に)の場合、逆関数を計算し、共通のハッシュ関数を持つ2つのメッセージを見つけることさえ困難です。



キーレスKA


md2 / 4/5/6


MD2は、1989年にRonald Rivestによって開発され、RFC 1319で説明されている暗号化ハッシュ関数です。メッセージは入力で任意の長さです。 ハッシュサイズは128ビットです。

BraindamagedmanがかつてMD5とMD6について書いたように

MD5アルゴリズムはかつて非常に人気がありましたが、ハッキングの最初の前提条件は90年代後半に現れ、現在ではその人気は急速に低下しています。

MD6アルゴリズムは、構造的な観点から非常に興味深いアルゴリズムです。 彼はSHA-3コンテストにノミネートされましたが、残念なことに、作者にはそれを条件付ける時間がなく、このアルゴリズムは第2ラウンドに合格した候補者のリストには含まれていません。

タイガー


1995年にRos AndersonとEli Bihamによって開発された暗号ハッシュ関数。 Tigerは、特に64ビットコンピューターで高速に動作するように設計されています。 Tigerには特許の制限はありません。参照実装とその修正の両方で自由に使用できます。 ハッシュ値は192ビット(Tiger / 192)ですが、SHA-1(Tiger / 160)およびMD4、MD5、RIPEMD、Snefru(Tiger / 128)との互換性のための短いバージョンもあります。 速度は132 Mbit / sです(単一のAlpha 7000プロセッサー、モデル660でテスト済み)。 最新のプロセッサでは、はるかに高速です(32ビットAMD Sempron 3000+でのテストでも、速度は約225メガビット/秒です)。

Tiger2の2番目のバージョンも実装されました。これは、MD5 / SHA-1と同様の別のビット追加アルゴリズムのみがメインバージョンと異なります。 テストベクターはTiger2で利用可能です。

Sha-1 / 2


暗号化ハッシュアルゴリズム。 RFC 3174に記述されています。任意の長さ(最大22 ^ 64-1ビット、およそ2エクサバイトに等しい)の入力メッセージの場合、アルゴリズムはメッセージダイジェストとも呼ばれる160ビットのハッシュ値を生成します。 多くの暗号化アプリケーションおよびプロトコルで使用されます。 また、米国の政府機関のプライマリとしても推奨されます。 SHA-1の根底にある原則は、MD4の設計でロナルドリベストが使用しているものと似ています。

SHA-3


Joan Dimen、Rijndaelの共著者、暗号MMB、SHARK、Noekeon、SQUARE、BaseKingの著者が率いる著者グループによって開発された可変ビットハッシュアルゴリズム。 2012年10月2日に、Keccakは、米国国立標準技術研究所によって開催された暗号アルゴリズムコンテストの勝者になりました。 2015年8月5日に、アルゴリズムはFIPS 202標準として承認および公開されました。ソフトウェアでは、著者はIntel Core 2プロセッサを搭載したPCで実行すると1バイトあたり12.5サイクルを宣言しました。 SHA-3アルゴリズムは、暗号化スポンジの原理に基づいて構築されています。

Ripemd


ルーバンカトリック大学で、ハンスドバーティン、アントンボッセラース、バートプレネル(バートプレネル)によって開発された暗号ハッシュ関数。 任意の入力メッセージの場合、関数はメッセージダイジェストと呼ばれる160ビットのハッシュ値を生成します。 RIPEMD-160はRIPEMDの改良版で、MD4の原理を使用し、より一般的なSHA-1に匹敵する性能を備えています。

アルゴリズムには、対応する名前の128ビット、256ビット、320ビットのバージョンもあります。

ハバル


1992年にYuliang Zheng、Josef Pieprzyk、Jennifer Seberryによって開発された暗号化ハッシュ関数。 任意の入力メッセージの場合、関数はメッセージダイジェストと呼ばれるハッシュ値を生成します。これは、128、160、192、224、または256ビット長です。 反復回数は3〜5の可変です。各反復でのラウンド数は32です。これはMD5の修正です。

さあ、単一キーの宇宙船の時間です。


レインダール


Advanced Encryption Standartとも呼ばれる、対称ブロック暗号化アルゴリズム。 1ブロックのサイズ。 AESコンテストの結果として米国政府によって受け入れられた128ビット、128/192/256キー。

彼はDESアルゴリズムを置き換えました(それについては少し後で)。 仕様は2001年11月26日に公開されました。 2002年5月26日が暗号化標準として宣言されました。 2009年現在、これは最も一般的な対称暗号化アルゴリズムの1つです。

興味深い事実として、128キーは340およびecillionの可能な組み合わせを提供します。

DES


IBMが開発し、1977年に米国政府によって公式の標準として承認された対称暗号化のアルゴリズム(FIPS 46-3)。 DESのブロックサイズは64ビットです。 このアルゴリズムは、16サイクル(ラウンド)のFeistelネットワークと56ビット長のキーに基づいています。 このアルゴリズムは、非線形(Sブロック)および線形(E、IP、IP-1の順列)変換の組み合わせを使用します。 DESにはいくつかのモードが推奨されます。


MMB暗号


英語から モジュラー乗算ベースのブロック暗号-乗算を使用するモジュラーブロック暗号)-有限グループでの乗算の操作に基づくブロック暗号化アルゴリズム。

有限グループ乗算演算(MMB)ブロック暗号は、1993年にJoan DimenがIDEA暗号の改良として開発したブロック暗号です。 この暗号の主な革新は、グループZ2n − 1の巡回乗算の使用です。 暗号の作成者は、n = 32にすることを提案したため、乗算はグループZ4294967295で行われます。 また、操作が実行される単語の長さはn、この場合は32であることにも注意してください。 この暗号を作成するときに追求された主な目標は、差分暗号解読に耐性のある暗号を作成することでした。 キースケジュールの欠点はEli Bihamによって発見されました。これは、暗号が線形暗号解読から保護されていないという事実と組み合わせて、他の暗号、たとえば3-Way暗号の使用につながりました。

ベースキング


暗号化において、BaseKingは、1994年にJoan Daemenによって開発されたブロック暗号です。

彼は3-WAYと非常に密接に関連しています。 実際、これらは同じ一般的な暗号化手法の変種です。

BaseKingのブロックサイズは192ビットで、3ウェイの2倍です。 キーの長さも192ビットです。

Daemanは、彼の論文で、ブロック暗号の広範な理論を、かなり自由に選択できる多くの可逆変換で構成されるかなり一般的な暗号アルゴリズムとして提示しました。 彼は、この一般的なスキームの既知の攻撃に対するセキュリティについて説明し、可変パラメーターの特定の選択から成る暗号の2つの具体例を示しました。 これらの暗号は3-WAYとBaseKingです。 BaseKingは、3-WAYと同じ種類の攻撃を受けやすくなっています。 Daemaen、Peeters、およびVan Asscheは、特定のBaseKingのこのような攻撃に対する耐性を高めるいくつかの方法とともに、差分分析に対する潜在的な脆弱性も示しました。

ヌケオン


Joan Dimen、MichaëlPeeters、Gilles Van Assche、Vincent Ramenによって設計され、NESSIE研究プロジェクトで発表された2つのブロック暗号のファミリー。 2つの暗号は、直接モードと間接モードのNOEKEONです。 モードは、キー拡張手順のみが異なります。

NOEKEONのキーの長さは128ビットです。 NOEKEONは各ラウンドで、それ自体に逆の変換シーケンスを使用します。これは、サードパーティのチャネルを介した攻撃の可能性がある場合でも、ハードウェアまたはソフトウェアで簡単に実装できます。 この暗号は、さまざまなプログラミング言語での実装がコンパクトで、さまざまなハードウェアで迅速に動作し、幅広いプラットフォームで非常に効果的です。 しかし、NOEKEONは、2001年4月にLars KnudsenとHåvardRaddumによって行われた暗号解析によって示されたWide Trail Design Strategyの要件を満たしていませんでした。KnudsenとRaddumは、この暗号が関連キーに基づいて攻撃される可能性があることを示しました。 NESSIEプロジェクト。

Noekeonアルゴリズムの両方のモードは、NESSIEコンテストの一部として検討のために受け入れられました。 両方のモードは、暗号学者のLars KnudsenとHåvardRaddumの研究で提案されたキーベースの攻撃を受けやすくなりました。 さらに、彼らはまた、ガンマ操作で置換テーブルを作成するための基準がアルゴリズムの高い暗号強度に寄与しないことを証明しました:置換テーブルを生成するとき、約86%の確率で結果のアルゴリズムは線形および/または差分暗号解析の対象となります。 また、関連するキーを見つける可能性が非常に高いことも示されています。 これらの理由は、Noekeonアルゴリズムが第2ラウンドを逃すのに十分であることが判明しました。

Dfc


Decorrelated Fast Cipherは、1998年にパリ高等師範学校、国立科学研究センター(CNRS)の暗号学者、および有名な暗号学者Serge Wodenayの指導の下で通信大手のFrance TelecomによってAESコンテストに参加するために作成されたブロック対称暗号アルゴリズムです。 PEANUT(n-Universal Transformationを使用したプリティ暗号化アルゴリズム)ファミリーの暗号に属します。
8ラウンドのFeistelネットワークを表す128ビット長のブロックを持つブロック暗号。

1つのソース暗号化キーから取得した8つの異なる128ビットラウンドキーを備えた64ビット暗号化機能を使用します。 暗号化機能は、各ラウンドで、ソーステキスト(ブロック)の左半分と、対応するラウンドの半分である2つの64ビットキーを使用して、64ビット暗号化テキストを取得します。 結果の暗号化されたブロックの左半分が右に追加されます。 次に、Feistelネットワークのアイデアに従って、ブロックの左右の部分が交換されます。 復号化は、ラウンドキーを逆の順序で使用した暗号化と同じ方法で行われます。 元の暗号化キーの長さは、AES競合によって提供される3つの固定サイズ(128、192、および256ビット)に限定されず、0〜256ビットの可変サイズにすることができます。

組み立て例:
void madd(u4byte acc[4], u4byte x[1], u4byte y[1])
{ __asm {
__asm mov ecx,x
__asm mov edx,y
__asm mov eax,[ecx]
__asm mov ecx,[edx]
__asm mul ecx
__asm mov ebx,acc
__asm xor ecx,ecx
__asm add [ebx],eax
__asm adc [ebx+4],edx
__asm adc [ebx+8],ecx
__asm adc [ebx+12],ecx
}
};
#endif


小数点


Decimは、Com Berbain、Oliver Billlet、Ann Cantu、Nicolas Courtois、Blandin Debre、Henry Gilbert、Louis Gubin、Alin Gouge、Louis Granbulan、Cederic Lardou、Marin Minier、Thomas PorninおよびErv Sibによって開発されたRSLOSベースのストリーム暗号です。 ハードウェア実装に特化。 特許を取得しています。 彼はeSTREAMプロジェクトで紹介されましたが、3番目のステージを超えることはありませんでした。

暗号の最も重要な要件は、さまざまな種類の攻撃に対する耐性です。 代数攻撃は、暗号をストリーミングするための最も深刻なセキュリティ脅威の1つです。 秘密鍵ビットの組み合わせとそれによって生成されるガンマビットの比率が単純または予測しやすい場合、秘密鍵ビットの組み合わせとキーストリームビット(ガンマ)の間の代数的依存関係を見つけることも簡単な作業です。 秘密鍵のビットの組み合わせ(または秘密鍵によって生成されたRSLOCの初期状態のビットの組み合わせ)と鍵ストリームのビット(ガンマ)の関係を複雑にするために、秘密鍵のビットの組み合わせからの非線形フィルタリング関数と、秘密鍵のビットの組み合わせと鍵ストリームのビット(ガンマ)間の非同期化メカニズムが使用されます) これらのメカニズム(非線形フィルタリング機能とRSLOCビットとキーストリームビットの組み合わせの間の非同期メカニズム)は両方とも、作業の基礎であり、Decim暗号の暗号解読攻撃を防止する主な手段です。
Decimストリーム暗号は、80ビットの秘密キーと64ビットの公開キー(初期化ベクトル)で始まります。 次に、ビットKとビットIVの特定の線形結合を使用し、非線形フィルタリング関数Fを使用し、ABSGサンプリングメカニズムを適用して、192ビットRSLOSの初期状態が計算されます。 これらすべての操作を実行した後、キーフローの生成が開始されます。 z = z t | T > > 0 連続的なビット出力を提供するために使用される特別なバッファバッファでそれを埋めます z t 暗号の出力に、プレーンテキスト文字のバイナリシーケンスで2を法として加算されます。

ミッキー


ストリーム暗号化アルゴリズム。 このアルゴリズムには、キー長が80ビット(MICKEY)と128ビット(MICKEY-128)の2つのバリアントがあります。 2005年にリソースが限られたシステムで使用するためにSteve BabbageとMatthew Doddによって開発されました。 このアルゴリズムには、高度なセキュリティを備えたシンプルなハードウェア実装があります。 シフトレジスタの不規則なクロッキングと、十分に長い期間と擬似ランダムキーシーケンスおよび攻撃に対する耐性を提供する新しい方法を使用します。 MICKEYアルゴリズムは、eCRYPTコミュニティが主催するeSTREAMコンテストに参加しました。 アルゴリズムの現在のバージョンは2.0です。 彼女は、ハードウェア実装のストリーム暗号としてeCRYPTポートフォリオに入りました。

1つのペア(K、IV)を使用して取得されるキーシーケンスの最大長は240ビットです。 ただし、IVが新しいシーケンスごとに異なるように選択されていれば、1つのKを使用して240個のこのようなシーケンスを取得することができます。

SC2000


2000年に富士通と東京大学が開発した対称ブロック暗号アルゴリズム。 このアルゴリズムは、128ビットブロックと128〜256ビット長のキーを使用します(AES標準と互換性があり、一般的なキー長-128/192/256をサポートします)。 2003年にCRYPTREC委員会によって日本の政府機関での使用が推奨されましたが、2013年には推奨暗号の「候補」リストに移動されました。 彼はネッシーコンテストに参加しましたが、攻撃に十分な抵抗力を示しましたが、第2ラウンドには参加しませんでした。その理由は、複雑すぎる構造と隠れた脆弱性の可能性に対する恐怖です。

SC2000は、混合構造の暗号です。Feistelネットワークと置換順列ネットワークの要素を使用します。 アルゴリズムは、6.5(128ビットキーの場合)および7.5(192〜256ビット長のキーの場合)の暗号化ラウンドを実行します。 各ラウンドは、ルックアップテーブルへのクエリ、キーの追加、およびキーレスの2ラウンドFeistelネットワークで構成されます。
3つの置換テーブルが使用されます。Feistelネットワークでは、各ラウンドの開始時に4x4ビットのS-Boxが使用され、5x5ビットと6x6ビットが使用されます。

SC2000アルゴリズムのキー拡張は、2つの段階で実行されます。中間キーが秘密の対称キーから生成され、次に拡張キーの必要な数のフラグメントが中間キーから計算されます。

暗号の1ラウンドは非常に複雑で、次の操作で構成されています。入力128ビット値は、32ビットの4つのサブブロックに分割され、それぞれXOR操作で拡張キーの32ビットフラグメントを重ね合わせます。 操作Tが実行され、データブロックがそれぞれ4ビットの32個のサブブロックに分割されます。

各4ビットサブブロックは、次のようなS4ルックアップテーブルを通過します。(2,5,10,12,7,15,1,11,13,6,0,9,4,8​​,3,14)

次に、データブロックは、操作Tの逆の操作T 'を使用して32ビットのサブブロックに分割されます。XOR操作は、拡張キーの他の4つのフラグメントを重ね合わせます。 サブブロックの最初のペアの値は、関数Fの入力に転送されます。この関数の結果として、2つの32ビット値が取得され、XOR演算によって最初の2つのサブブロックに重ねられます。 サブブロックの最初のペアはサブブロックの2番目のペアと交換され、最後の変換ステップが繰り返されます。

RC4


ARC4またはARCFOUR(RC4と呼ばれます)としても知られているのは、コンピューターネットワークのさまざまな情報セキュリティシステム(SSLおよびTLSプロトコル、WEPおよびWPAワイヤレスセキュリティアルゴリズムなど)で広く使用されているストリーム暗号です。

この暗号はRSA Securityによって開発されたものであり、使用するにはライセンスが必要です。
RC4アルゴリズムは、ストリーム暗号と同様に、擬似ランダムビットジェネレーターに基づいています。 キーはジェネレーターの入力に書き込まれ、擬似ランダムビットは出力で読み取られます。 キーの長さは40〜2048ビットです。 生成されたビットの分布は均一です。

暗号の主な利点:


RC4は次の場合に非常に脆弱です。


これらの要因とその使用方法により、暗号システムが安全でなくなる可能性があります(WEPなど)。

Illivionのさらなる実装。

C#実装
 using System; using System.Linq; namespace RC4_Testing { public class RC4 { byte[] S = new byte[256]; int x = 0; int y = 0; public RC4(byte[] key) { init(key); } // Key-Scheduling Algorithm //    private void init(byte[] key) { int keyLength = key.Length; for (int i = 0; i < 256; i++) { S[i] = (byte)i; } int j = 0; for (int i = 0; i < 256; i++) { j = (j + S[i] + key[i % keyLength]) % 256; S.Swap(i, j); } } public byte[] Encode(byte[] dataB, int size) { byte[] data = dataB.Take(size).ToArray(); byte[] cipher = new byte[data.Length]; for (int m = 0; m < data.Length; m++) { cipher[m] = (byte)(data[m] ^ keyItem()); } return cipher; } public byte[] Decode(byte[] dataB, int size) { return Encode(dataB, size); } // Pseudo-Random Generation Algorithm //    private byte keyItem() { x = (x + 1) % 256; y = (y + S[x]) % 256; S.Swap(x, y); return S[(S[x] + S[y]) % 256]; } } static class SwapExt { public static void Swap<T>(this T[] array, int index1, int index2) { T temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; } } } 


RC5


RSA Security Inc.のRon Rivestが設計したブロック暗号 可変数のラウンド、ブロック長、キー長で。 これにより、範囲が拡張され、アルゴリズムのより強力なバージョンへの移行が簡素化されます。

クラシックRC5の「ハーフラウンド」の変換がわずかに変更されるアルゴリズムには、いくつかの異なるバージョンがあります。 古典的なアルゴリズムは、3つの基本演算とその反転を使用します。

  1. モジュロ加算
  2. ビットごとの排他的OR(XOR)
  3. 可変ビット数による循環シフト演算。

主なイノベーションは、以前の暗号化アルゴリズムでは使用されていなかった可変ビット数でのシフト操作の使用です。 これらの操作はほとんどのプロセッサで同様に迅速に実行されますが、同時にアルゴリズムの差分および線形暗号解析を大幅に複雑にします。

RC5暗号化は2つのステップで構成されます。 キー拡張手順と暗号化を直接。 復号化の場合、キー拡張手順が最初に実行され、次に暗号化手順と反対の操作が実行されます。

うさぎ


2003年2月に第10回FSEシンポジウムで初めて導入された高速ストリーム暗号。 2005年5月に、彼はインライン暗号化システムのヨーロッパ標準を作成することを目的としたeStreamコンテストに送られました。

ウサギの開発者は、Martin Boesgaard、Mette Vesterager、Thomas Pedersen、Jesper Christiansen、Ove Scaveniusです。

Rabbitは128ビットキーと64ビット初期化ベクトルを使用します。 この暗号は、暗号化速度が速いため、ソフトウェアで使用するために設計されました。 同時に、暗号化速度は、Pentium 3プロセッサでは1バイトあたり3.7サイクル(CPB)、ARM7では1バイトあたり10.5サイクルに達する可能性があります。 ただし、暗号はハードウェアで実装された場合、高速でコンパクトであることが証明されました。

暗号の主要なコンポーネントは、反復ごとに128メッセージビットを暗号化するビットストリームジェネレーターです。 暗号の利点は、2つの連続する反復間で内部状態を完全に混合することです。 ミキシング機能は、最新のプロセッサで使用可能な算術演算に完全に基づいています。つまり、暗号を実装するためにS置換ブロックとルックアップテーブルは必要ありません。

暗号の作成者は、Crypticoホームページで技術的な説明の完全なセットを提供しました。 暗号はRFC 4503にも記載されています。Crypticoは暗号特許を保持しており、長年にわたって商用目的で暗号を使用するにはライセンスが必要でした。 ただし、2008年10月6日には、コードをあらゆる目的で無料で使用することが許可されました。

ニューデス


暗号化において、ロバート・スコットが1985年にDES標準の代替として開発した対称ブロック暗号化アルゴリズム。120ビットの安全なキーサイズでより信頼性の高い暗号を実装します。

NewDESは派生名がありますが、完全に異なる構造を持ち、DESよりもはるかに単純で、プログラムで簡単に実装でき、ビット単位の順列は含まれません。すべての操作はバイトで実行されます。 このアルゴリズムは256要素の置換テーブルを使用し、1回のラウンドで8の加算演算がモジュロ2で実行され、関数Fを使用した置換-置換テーブルを使用した置換が実行されます。

初版の主要なスケジュールはかなり弱く、NewDES-96版で修正されました。 判明したように、NewDESアルゴリズムはDESアルゴリズムよりも暗号解読に対する耐性が低くなりますが、NewDES-96に対するブルートフォース攻撃はほとんど不可能であり、このエディションのアルゴリズムははるかに安全です。

サルサ20


Daniel Bernshteinが開発したインライン暗号化システム このアルゴリズムは、eSTREAMコンテストで発表されました。その目的は、メールシステムによって送信されるデータの暗号化に関する欧州標準を作成することでした。 このアルゴリズムは、最初のプロファイル(高帯域幅のソフトウェアアプリケーションのストリーム暗号)で競争に勝ちました。

Salsa20暗号は次の操作を使用します。

  1. 32ビット数の追加。
  2. 2を法とするビット加算(xor);
  3. ビットシフト。

このアルゴリズムは、20ループのハッシュ関数を使用します。 その主な変換は、AESアルゴリズムに似ています。

ソセマヌク


Sosemanukは、プロファイル1の「ストリーム暗号プリミティブのECRYPTコール」によると、新しい対称ソフトウェア-指向ストリーム暗号です。 キーの長さは128〜256ビットです。 初期値は128ビットに設定されています。 伝えられるところでは、キーの長さは128ビット保護に達します。 Sosemanuk暗号は、SNOW 2.0ストリーム暗号の基本原則と、ブロック暗号SERPENTから派生したいくつかの変換の両方を使用します。 Sosemanukは、セキュリティと有効性の両方の点でSNOW 2.0を改善することを目指しています。 特に、簡単なIVセットアップ手順を使用します。 また、いくつかのアーキテクチャ(プラットフォーム)のパフォーマンスを向上させるために、静的データの数を減らす必要があります。

Sosemanuk暗号は、SNOW 2.0ストリーム暗号の基本原則(「雪」-英語の「雪」)と、ブロック暗号SERPENT(「SERPENT」-英語の「蛇」)から派生したいくつかの変換の両方を使用します。 このため、その名前はヘビと雪の両方に関連付ける必要があります。 しかし、雪蛇は冬には眠りにつくか暖かい気候に移動するため、雪蛇は存在しないことはよく知られています。 さらに、ソセマヌクは、カナダ東部の部族に分布する人気のあるスポーツです。 ゲームのアイデアは、雪の多い海岸に木製の棒をできる限り投げ込むことです。 名前は人々の方言に由来し、雪の中の棒と蛇との比較が含まれています。 「Kwakweco-cime win」はこのゲームの名前の1つですが、暗号の名前にはふさわしくありません。

トリビウム


対称同期ストリーミング暗号化アルゴリズム。主に、作業速度と要素数のバランスが柔軟なハードウェア実装に焦点を当てており、かなり効果的なソフトウェア実装の可能性もあります。

この暗号は、欧州プロジェクトeSTREAMのポートフォリオの一部として、2008年12月に導入されました。プロファイル2(ハードウェア指向の暗号)。 暗号の作成者はクリストフ・デ・カニエとバート・プレネルです。

このストリーム暗号は、最大で 2 64 キーの80ビットとIV(初期化ベクトル)の80ビットの出力ストリームのビット。 これはeSTREAMプロジェクトの最も単純な暗号であり、暗号の安定性に優れた結果を示しています。

Triviumは、軽量ストリーム暗号としてISO / IEC 29192-3標準に含まれています。
Triviumの初期状態は、合計288ビットの3つのシフトレジスタです。 各サイクルで、シフトレジスタのビットは、ダイレクトとフィードバックの非線形の組み合わせによって変更されます。 暗号を初期化するには、キーKと初期化ベクトルIVが2 of 3レジスタに書き込まれ、アルゴリズムが4x288 = 1152回実行されます。これにより、キーの各ビットと初期化ベクトルの各ビットに対する初期状態の各ビットの依存性が保証されます。

初期化ステージを通過した後、各クロックサイクルでキーストリームZの新しいメンバーが生成され、次のテキストメンバーとXORプロシージャを実行します。 復号化手順は逆の順序で行われます。暗号文の各メンバーは、キーストリームZの各メンバーとXORプロシージャを渡します。

VMPC


これは、コンピューターネットワークの一部の情報保護システムで使用されるストリーム暗号です。 暗号は、暗号作成者Bartoszultak(ポーランド語。BartoszŻółtak、英語。BartoszZoltak)によって、人気の暗号RC4の拡張バージョンとして開発されました。 VMPCアルゴリズムは、ストリーム暗号と同様に、キーによってパラメーター化された擬似ランダムビットジェネレーターに基づいて構築されます。 RC4などの暗号の主な利点は、高速、可変キーサイズ、初期化ベクトル(128〜512ビットを含む)、実装の容易さ(文字通り数十行のコード)です。

暗号の基礎は擬似乱数ジェネレータであり、そのベースは一方向の不可逆関数VMPC(Eng。Variably Modified Permutation Composition)です。

カエル


コスタリカの会社TecApro Internacionalによって開発された、非正統的な構造の対称ブロック暗号化アルゴリズム。アメリカAESコンテストの参加者の1人。

FROGアルゴリズムは、1998年に、ラテンアメリカの小さなコスタリカ州(以前は暗号技術の開発では不明でした)のTecnologia Apropriada(TesArgo)の3人の専門家によって作成されました:Dianelos Georgoudis、Damian Lerouv Jillpy(Damian Leroux)Biess and Besサイモン・チャベス)。

競争のために発表された暗号バージョンは、AES要件に準拠しており、128ビットに等しいブロックと、128、192、または256ビット長のキーを持っています。 アルゴリズム自体は、理論的には、40〜1000ビットの長さのキーを許可します。

コードFROGは、コスタリカで登録された国際企業TecApro Internacionalによって競争に備えられました。 アルゴリズムの開発者は、暗号化の世界ではあまり知られていないD. Georgoudis、D。Leroux、およびB. Chavesです。 著者によると、FROGは「非正統的な構造を持つ新しい暗号」です。 暗号の強度の基礎は複雑な設計の秘密の内部キーであり、暗号化/復号化操作自体は非常に簡単です。
8月に、TWOFISHチーム(Wagner、Ferguson、およびSchneier)は、FROG暗号キーを約257の人件費で開くことができることを示しました。

暗号の強度に関しては、この指標を検証するのははるかに困難です。 NIST Webサイトでの最初のラウンドの予備評価段階で、AES2会議で直接、ほとんどすべての候補暗号の評判を何らかの形で「傷つけた」かなりの数の暗号解析結果が提示されました。 ただし、明示的な部外者LOKI、FROG、MAGENTA、およびHPCについて話さない場合、アルゴリズムの明らかな弱点は見つかりませんでした。

ナッシュ


ロシアの会社LAN CryptoのためにAnatoly LebedevとAlexei Volchkovによって開発されたブロック対称暗号化アルゴリズム。

NUSHには、異なるブロックサイズ(64、128、256ビット)、異なるラウンド数(ブロックサイズに応じて36、128、または132ラウンド)のいくつかの異なるオプションがあり、128、192、または256ビットのキー長を使用します。 アルゴリズムはSブロックを使用せず、AND、OR、XOR、モジュロ加算、巡回シフトなどの演算のみを使用します。 最初のラウンドの前と最後のラウンドの後、キーは「白く」されます。

このアルゴリズムはNESSIEプロジェクトで提案されましたが、選択されませんでした。これは、線形暗号解読がブルートフォース攻撃よりも効果的であることが示されたためです。
暗号化アルゴリズムに基づいて、他のアルゴリズムを構築できます。 これらのいくつかはこの記事で概説されています。

REDOC


1990年にMichael WoodによってCryptech用に開発され、REDOC IIという名前の対称ブロック暗号アルゴリズム。すべての操作-置換、置換、XORはバイトで実行されるため、プログラムで効果的に実装できます。アルゴリズムは、テーブル関数の変更を使用して、キーとソースのプレーンテキスト依存テーブルのセット(Sブロック)を使用します。アルゴリズムは、マスクの使用を区別します。キーテーブルから取得した番号。マスクは、特定のラウンドの特定の関数のテーブルを選択するために使用されます。この場合、マスク値とデータ値の両方が使用されます。
キーを開く最も効果的な方法はブルートフォースです;目標を達成するには2160回の操作が必要です。ほぼ唯一の効果的な暗号解析は、Thomas Kuzikによるアルゴリズムのラウンドの1つを開くことでしたが、それ以上のラウンドに拡張することはできませんでした。 2300のオープンテキストの助けを借りて、4ラウンド3のマスク値が取得された後、ShamirとBihamによるラウンドの1つの暗号解析が実行されましたが、これは成功しなかったため、現時点ではアルゴリズムは暗号と見なされます。

また、Michael Woodが作成したアルゴリズムの大幅に簡素化されたバージョンであるREDOC IIIもあります。 80ビットブロックが使用され、キーの長さは可変であり、20,480ビットに達する可能性があります。順列と置換は除外され、ブロックとキーに対するすべての操作はXORの使用のみに基づいています。そのため、暗号化速度が大幅に向上し、差分暗号解読に対する耐性が損なわれます。このアルゴリズムは、プライベートキーに基づいて生成された256個の10バイトキーと、XOR 128 10バイトキーに基づいて取得された2つの10バイトマスクブロックに基づいています。 REDOC IIIアルゴリズムの両方のマスクを正常に回復するには、223の平文が必要です。このアルゴリズムはシンプルで高速です。 33メガヘルツプロセッサ80386では、2.75 Mbpsの速度でデータを暗号化します。 REDOC II暗号化システムは、20 MHzのクロック周波数で800 kbpsを暗号化できます。

REDOC IIアルゴリズムとその簡易バージョンは、米国で特許を取得しています。

三方


これは、Rijndaelアルゴリズム(AESと呼ばれることもある)の作成者の1人であるJoan Daemanによって開発された、秘密鍵を使用した対称ブロック暗号です。

3-Wayアルゴリズムは11ステップのSPネットワークです。96ビットのブロックとキーが使用されます。暗号化スキームは、SPネットワークなどのアルゴリズムに一般的であるように、効果的なハードウェア実装を伴います。

公開後まもなく、3ウェイアルゴリズムの暗号解析が成功し、関連キーに基づく攻撃に対する脆弱性が示されました。アルゴリズムは特許を取得していません。

フグ


可変キー長のブロック対称暗号化を実装する暗号化アルゴリズム。1993年にブルースシュナイアーによって設計されました。これはFeistelネットワークです。XOR、置換、加算などの簡単で高速な操作で実行されます。特許がなく自由に配布されます。

Blowfishが登場する前は、既存のアルゴリズムは特許を取得しているか、信頼性が低く、一部は秘密にされていました(たとえば、Skipjack)。このアルゴリズムは、旧式のDESおよび特許取得済みのIDEAに代わる迅速かつ無料の代替手段として、1993年にBruce Schneierによって開発されました。著者によると、Blowfishの設計基準は次のとおりです。

  1. 速度(32ビットプロセッサでの暗号化は26サイクルで発生します);
  2. 単純性(アルゴリズムの実装におけるエラーの可能性を減らす単純な操作の使用による);
  3. コンパクト(5 KB未満のメモリで動作する能力);
  4. カスタムセキュリティ(可変キー長)。

アルゴリズムは、キー拡張とデータ暗号化の2つの部分で構成されています。キー拡張の段階で、元のキー(最大448ビット長)は、18個の32ビットサブキーと256個の要素を含む4個の32ビットSブロックに変換されます。受信したキーの合計量は18 + 256 4 32 = 33344 b およびt18 + 256 4 32 = 33344ビットまたは4168バイト。

キャスト


多くの暗号保護製品、特にPGPとGPGの一部のバージョンで使用されているFeistelネットワークブロック対称暗号化アルゴリズムは、カナダ政府による使用も承認されています。

このアルゴリズムは、1996年に他のCAST-256アルゴリズム(AES候補アルゴリズム)でも使用されているCAST暗号構築方法を使用して、Carlisle AdamsとStafford Tavaresによって作成されました。

CAST-128は、12ビットまたは16ラウンドのFeistelネットワークで構成され、ブロックサイズは64ビット、キーの長さは40〜128ビットです(ただし、増分は8ビットのみです)。キーサイズが80ビットを超える場合、16ラウンドが使用されます。このアルゴリズムは、ベント関数、XOR演算、モジュラー演算(モジュラー加算および減算)に基づいた8x16 Sブロックを使用します。ラウンド関数には3つの異なるタイプがありますが、構造は似ており、異なる場所で実行する操作(加算、減算、またはXOR)の選択のみが異なります。

CAST-128はEntrustの特許によって保護されていますが、商用または非商用目的で世界中で無料で使用できます。

CASTは、差分および線形暗号解読に耐性があります。 CASTアルゴリズムの強みは、Sブロックにあります。 CASTには固定Sブロックがなく、アプリケーションごとに再構築されます。 CASTの特定の実装用に作成されたSブロックは二度と変更されません。つまり、Sブロックは実装に依存し、キーに依存しません。 Northern Telecomは、Macintoshコンピューター、PC、およびUNIXワークステーション用のEntrustソフトウェアパッケージでCASTを使用しています。彼らが選択したSブロックは公開されていませんが、驚くことではありません。
CAST-128はEntrust Technologiesが所有していますが、商用および非商用の両方で無料で使用できます。CAST-256は無料でアクセス可能なCAST-128拡張機能で、最大256ビットのキーサイズを受け入れ、128ビットのブロックサイズを持ちます。CAST-256は、AESの最初の候補の1つでした。

CAST-256は、Cボックスを含むCAST-128と同じ要素から構築されますが、ブロックサイズは2倍になり、128ビットに等しくなります。これは、拡散特性と暗号保護に影響します。
RFC 2612は、CAST-256を商業目的および非商業目的で世界中で自由に使用できると述べています。

e2


暗号化において、E2は1998年にNTTが作成し、AESコンテストに提出した対称ブロック暗号です。

他のAES候補と同様に、E2は128、192、または256ビットキーを使用して128ビットブロックで実行されます。12ラウンドのFeistelネットワークを使用します。E2には、モジュラー乗算を使用するような入力と出力の変換変換がありますが、ラウンド関数自体はXOR演算とSボックス検索のみで構成されています。単一の8×8ビットSボックスは、有限体GF(28)上でX127のべき乗に離散的に上昇するアフィン変換で構成されています。NTTは、E2の多くの特別な機能をCamelliaで採用しており、本質的にE2に置き換えられています。

Twofish


ブロックサイズ128ビット、キー長256ビットまでの対称ブロック暗号化アルゴリズム。ラウンド数16。ブルース・シュナイアー率いる専門家チームによって開発されました。彼は、AESコンペティションの第2ステージの5つのファイナリストの1人でした。このアルゴリズムは、Blowfish、SAFER、およびSquareアルゴリズムに基づいて開発されています。

アルゴリズムの特徴は、事前に計算されたキー依存の置換ノードの使用と、暗号化サブキーを展開するための複雑なスキームです。nビット暗号化キーの半分は暗号化キー自体として使用され、もう1つはアルゴリズムを変更するために使用されます(交換ノードはそれに依存します)。

Twofishは、AESのNISTの要件と推奨事項を満たすように特別に設計されました。

  1. 128ビットブロック対称暗号
  2. キーの長さ128、192、および256ビット
  3. 弱いキーの欠如
  4. ( 32- )
  5. ( , , - . .).
  6. — .

しかし、アルゴリズムの構造の複雑さ、したがって、弱いキーまたは隠されたリンクの分析の複雑さ、およびほとんどのプラットフォームのRijndaelと比較してかなり遅い実行時間は、彼の好意を発揮しませんでした。

Twofishアルゴリズムは、128ビット入力ブロックのBlowfishアルゴリズムを変更しようとした結果生じました。新しいアルゴリズムは、ハードウェアで簡単に実装され(より小さいテーブルの使用を含む)、より高度なキースケジュール拡張システムを持ち、独自の機能Fを

持つことになりましたその結果、アルゴリズムは4つのブランチを持つ混合Feistelネットワークとして実装されました。アダマール暗号変換(Pseudo-Hadamar Transform、PHT)を使用して相互に変更します。

最新の(当時)32ビットプロセッサ(およびスマートカードや同様のデバイス)で効果的に実装できる可能性は、Twofish開発者を導く重要な原則の1つです。

たとえば、関数Fでは、PHTを計算してキーKの一部を追加する場合、従来のxorの代わりに意図的に追加が使用されます。これにより、Pentiumプロセッサフ​​ァミリのLEAチームを使用できるようになり、1サイクルでアダマール変換の計算が可能になりますT 0 + 2 T 1 + K 2 r + 9 m o d 2 32T 0 + 2 T 1 + K 2 r + 9 m o d 2 32    (この場合、コードは特定の値にコンパイルする必要がありますキー)。
Twofishアルゴリズムは特許を取得していないため、請求や控除なしで誰でも使用できます。多くの暗号化プログラムで使用されていますが、Blowfishほど広く使用されていません。

Xtea


TEAアルゴリズムの重大なエラーを排除するために設計されたブロック暗号アルゴリズム。暗号開発者は、David WheelerとRoger Needham(ケンブリッジ大学コンピューター科学部)です。このアルゴリズムは、1997年にリリースされていない技術レポートで発表されました。暗号は特許を取得していません。メモリ要件が非常に低く、実装が容易であるため、多くの暗号化アプリケーションと幅広いハードウェアで広く使用されています。

TEAと同様に、暗号は64ビットブロックでの操作に基づいており、32の完全なサイクルを持ち、各ラウンドには2ラウンドのFeistelネットワークがあります。つまり、64ラウンドのFeistelネットワークになります。ただし、より良い拡散を達成するためのラウンドの数は、パフォーマンスを損なうほど増やすことができます。さらに、XTEAでは、TEAと同様に、4つの32ビットワードK [0]、K [1]、K [2]およびK [3]で構成される128ビットキーが使用されます。 XTEAには、通常の意味での主要な計画アルゴリズムはありません。各ラウンドで4つのキーワードのどれを使用するかを決定するために、定数δ= 9E3779B916がアルゴリズムで使用されます。 TEAでは、そのような配布はありません。 TEAとのもう1つの違いは、暗号で使用されるビット操作の順列です。これらの改善のおかげで、XTEAはTEAと比較して大きな問題を抱えていません。しかし同時に、TEAアルゴリズムの2つの主な欠陥を排除しました。
TEAの各キーは他の3つと同等です。つまり、開発者が意図したように、有効なキーの長さは128ビットではなく126ビットです。
TEAは、関連するキーに対する攻撃を受けやすくなっています。このような攻撃では、選択されたプレーンテキストが223個だけで、時間の複雑さは232になります。

ウェイク


1993年にDavid J Wheelerによって作成された自動キーストリーム暗号化アルゴリズム。これは、中速ブロック暗号化を使用した暗号化システムです。作業時には、繰り返しテーブルの使用と大きな状態空間の存在が必要です。暗号の範囲は32ビットワードを使用し、CFBモードで動作します-暗号化されたシーケンスの前のワードは、次の生成の基礎として機能します。また、アルゴリズムは256個の32ビットワードで構成されるS置換ブロックを使用し、安定性を高めます。

アルゴリズムは、選択されたソーステキストに対する攻撃および選択された暗号テキストに対する攻撃に対して不安定です。

カツオ


Capstoneプロジェクトの一環として米国国家安全保障局によって開発されたブロック暗号。開発後、暗号に関する情報は分類されました。元々は、クリッパーチップでの使用を目的としており、政府の電話ネットワークやモバイルおよびワイヤレスネットワークを介して送信される音声情報を保護していました。アルゴリズムは後に機密解除されました。

Skipjackは、Capstoneプロジェクトによって提案されたイニシアチブの1つでした。このプロジェクトは、米国政府が資金提供した国家安全保障局(NSA)と米国国立標準技術研究所(NIST)が主導しました。このイニシアチブの正式な開始日は1993です。暗号化アルゴリズムは1980年に開発され、その最初の実装は1987年に取得されました。この暗号は、保護された機器に組み込まれているClipperチップで使用するためのものでした。同時に、Skipjackはメッセージの暗号化にのみ使用され、認証機関によるその後の使用の可能性のためのキーの保管-暗号の使用で最も議論されている側面-は、法執行機関アクセスフィールドと呼ばれる別のメカニズムによって達成されました。

当初、プロジェクトは分類され、そのために大きな批判を受けました。いくつかの学術研究者は、国民の信頼を高め、アルゴリズムを評価するよう求められました。独立した徹底的な研究の時間が不足しているため、専門家は、NSAによって提示されたアルゴリズム開発と評価プロセスの記述の研究に集中しました。これに加えて、彼らは1ヶ月の間に一連の小さなテストを実施しました。彼らの仕事に関する予備報告(最終報告はありませんでした)は、3つの結論を示しました。

  1. 18か月ごとに計算能力のコストが半減することを考えると、36年後にのみ、徹底的な検索によってSkipjackをハッキングするコストは、DESをハッキングするコストに匹敵します。
  2. 差分暗号解読を含むより高速な方法を使用して暗号を破るリスクは無視できます。アルゴリズムには弱いキーと相補性のプロパティはありません。
  3. 暗号解読に対するSkipjackの抵抗は、アルゴリズム自体の機密性に依存しません。

このコードは1998年6月24日に公開されました。2016年8月、NISTは暗号化標準の使用に関する新しい原則を採用し、政府の目的でSkipjackアルゴリズムの認証を無効にしました。

Skipjackは、80ビットキーを使用して64ビットデータブロックを暗号化/復号化します。これは、32ラウンドの不均衡なFeistelネットワークです。

サメ


SHARKアルゴリズムは、ベルギーのルーベンカトリック大学を代表する他の3人の専門家と共同で、AES標準の将来の著者であるVincent RidgemanとJoan Damenによって開発されました。これはSquareアルゴリズムよりも少し早い開発です。SHARKは1995年に開発されました

。アルゴリズムは128ビットキーと64ビットブロックを使用します。 SHARKアルゴリズムには控えめなパラメーターがあり、既存の暗号をIDEAやDESなどの64ビットブロックに置き換えるように設計されています。

SHARK暗号には、SHARK-A(英語アフィン変換)とSHARK-E(英語exor)の2つのバリアントがあります。
攻撃は、5ラウンドの変更されたバージョンの暗号に対してのみ行われます。アルゴリズム自体は現時点では安全と見なすことができます。

このアルゴリズムは開発され、より安全な新しいKHAZAD暗号の基礎になりました。Rijndaelアルゴリズムは、SHARK暗号とその子孫のアイデアに基づいて検討することもできます。


ロス・アンダーソン、イーライ・ビハム、ラース・クヌーセンによって設計されました。以前の著者の開発の一部は、動物にちなんで名付けられました。たとえば、タイガー、ベアなどです。
このアルゴリズムは、AESコンテストの第2ステージの最終候補の1つでした。AESコンテストに参加した他のアルゴリズムと同様に、Serpentのブロックサイズは128ビットで、可能なキー長は128、192、または256ビットです。このアルゴリズムは、4つの32ビットワードのブロックで動作する32ラウンドSPネットワークです。Serpentは、32個の1ビット「ストリーム」を使用してすべての操作を並行して実行できるように設計されました。

Serpentは他のAESファイナリストよりも保守的なアプローチを採用しており、暗号設計者は既知のタイプの暗号解読に対抗するには16ラウンドで十分であると考えていましたが、アルゴリズムがまだ未知の暗号解読方法に耐えられるようにラウンドの数を32に増やしました。

AESコンテストのファイナリストになったSerpentアルゴリズムは、投票の結果、2位になりました。
蛇は特許を取得しておらず、パブリックドメインです。

このアルゴリズムは、AESコンテストに参加するために、「21世紀の暗号アルゴリズム」というスローガンの下で作成されました。新しい、未検証、未検証のテクノロジーは暗号の作成に使用されませんでしたが、採用された場合、膨大な量の金融取引と政府情報を保護するために使用されます。AES競技者の主な要件は、候補アルゴリズムが3DESよりも速く、少なくとも同じレベルのセキュリティを提供することでした。128ビットのデータブロックと256ビットのキーが必要です。16ラウンドのサーペントは3DESと同じくらい信頼できますが、2倍高速です。しかし、著者は、信頼性を高めるために、ラウンド数を32に増やす価値があると考えました。これにより、暗号はDESと同じくらい速く、3DESよりもはるかに信頼性が高くなりました。

シール


ソフトウェア実装用に最適化された対称インラインデータ暗号化アルゴリズム。

1993年にIBMによってPhil RogawayとDon Coppersmithによって設計されました。このアルゴリズムは最適化されており、32ビットプロセッサ向けに推奨されています。動作するには、数キロバイトのキャッシュと8つの32ビットレジスタが必要です。暗号化速度は、テキストのバイトあたり約4マシンサイクルです。 160ビットキーは、エンコードとデコードに使用されます。遅いキー処理操作による不要な速度損失を避けるために、SEALは最初にいくつかの変換を実行して、特定のサイズの3つのテーブルを作成します。
これらのテーブルは、キー自体ではなく、テキストの暗号化と復号化に直接使用されます。

このアルゴリズムは、非常に信頼性が高く、非常に高速であると考えられており、1993年12月以来、米国特許第5454039号によって保護されています。

1991年、Ralph C. Merkleは、ソフトウェア指向の暗号の費用対効果を説明しました。彼の意見では、最も効果的なのはクフ、FEAL、RC4でした。ただし、信頼性の高い暗号化に対する顧客のニーズは増え続けており、新しいソリューションと古いソリューションの改良を探す必要がありました。

1992年の夏に、新しいソフトウェア最適化アルゴリズムSEAL 1.0の最初のバージョンの開発が始まりました。開発者は、ブロック暗号のラルフマークル(英語のラルフC.マークル)クフから主要なアイデアと作業の原則を取り入れました。彼らは、その実装が可能な機器の範囲を狭めることにより、プロジェクトの最高の特性(主に速度)を達成することに決めました。少なくとも8つの汎用レジスタと少なくとも8 KBのキャッシュを備えた32ビットマシンを選択しました。 1993年3月にブロック暗号を作成することが決定されましたが、その年の10月までに開発された擬似ランダム関数ファミリーの構造がより速く機能し、開発者が暗号化をストリーミングするようになりました。この構造は4つのレジスタで構成され、各レジスタはテーブルに応じて「隣接」を変更し、キーから取得。このような変更を多数行った後、レジスタ値がキーシーケンスに追加されます。キーシーケンスは、特定の長さに達するまで反復ごとに増加します。開発中、アルゴリズムの内部サイクルにほとんどすべての注意が払われました。これは、レジスタの初期化手順とキーからテーブルを生成する方法がセキュリティにわずかな影響を与えたためです。最終形態では、SEAL 1.0プロジェクトは1993年12月にのみ登場しました。これは、レジスタの初期化の手順とキーからテーブルを生成する方法がそのセキュリティにわずかな影響を与えたためです。最終形態では、SEAL 1.0プロジェクトは1993年12月にのみ登場しました。これは、レジスタの初期化の手順とキーからテーブルを生成する方法がそのセキュリティにわずかな影響を与えたためです。最終形態では、SEAL 1.0プロジェクトは1993年12月にのみ登場しました。

1996年、Helena Handschuh(Eng。)およびHenri Gilbert(Eng。)は、SEAL 1.0の簡易バージョンおよびSEAL 1.0自体に対する攻撃について説明しました。彼らは必要としていた2 4つの32ビットワードの長さを持つ 30のテキスト。キーに対する擬似ランダム関数の依存関係を見つけます。その結果、SEAL 3.0およびSEAL 2.0アルゴリズムの次のバージョンでいくつかの改善と変更が行われました。たとえば、バージョン1.0では、キーシーケンスの各反復は2つのレジスタのみの変更で終了し、バージョン3.0では4つすべてが変更されました。SEAL 3.0およびSEAL 2.0は、元のSHAの代わりにSHA-1アルゴリズム(英語のSecure Hash Algorithm-1)を使用してテーブルを生成し、暗号解析に対する耐性を高めました。

より安全


順列-順列ネットワークに基づく対称ブロック暗号化アルゴリズムのファミリー。アルゴリズムの開発への主な貢献は、ジェームズマッセイによって行われました。暗号の最初のバージョンは、1993年に作成および公開されました。

暗号化キーの長さとソーステキストのブロックのサイズによって互いに異なるいくつかの暗号オプションがあります。

アルゴリズムの最初のバージョン-SAFER K-64は、1993年にカリフォルニアの法人「Cylinc」のためにJames Masseyによって開発されました。同じ年に公開されたアルゴリズムには、ブロックと64ビットの暗号化キーがありました。 6ラウンドの暗号化を使用することをお勧めしました。ただし、キーの長さを128ビットに増やす必要があるため(アルゴリズムの元のバージョンで脆弱性が発見されたため)、MasseyはSAFER K-128暗号の新しいバージョンを開発しました。これはSAFER K-64の翌年に公開されました。新しいアルゴリズムには、シンガポール内務省によって開発された主要なスケジュールが含まれ、その後さまざまな目的で使用されました。また、このアルゴリズムには10ラウンド(最大12ラウンド)の暗号化を使用することをお勧めしました。

しばらくして、アルゴリズムの最初のバージョンでは、ラースクヌーセンとショーンマーフィーによって発見されたいくつかの弱点が明らかになりました。これには、SANU SK-64およびSAFER SK-128と呼ばれるアルゴリズムの新しいバージョンの作成が必要であり、Knudsenによって提案されたスキームに従ってキースケジュールが変更されました。キーの長さを40ビットに短縮したオプションも開発されました-SAFER SK-40。アルゴリズム名の略語「SK」は、「強化されたキースケジュール」の略です。暗号の新しいバージョンでは、6回ではなく、少なくとも8回(最大10回)の暗号化を使用することが提案されました。

SAFER +アルゴリズムは、1998年にカリフォルニアに拠点を置くCylinc Corporationがアルメニア科学アカデミーと共同で、最初の予選ラウンドのみを開催したAESコンテストに参加するために開発しました。この暗号には、128ビットの入力ブロックと、128、192、または256ビットのキーサイズがあります。

SAFERアルゴリズムの最後に作成された品種は、2000年にMasseyによって開発されたSAFER ++であり、SAFER +アルゴリズムのさらなる開発になりました。このアルゴリズムは、ヨーロッパのNESSIEアルゴリズムの競争に参加し、64ビットブロックの暗号と128ビットブロックの2つのバージョンで提示されました。競争の第2段階に入りましたが、NESSIEが推奨する暗号プリミティブのセットでは選択されませんでした。専門家は、8ビットのマシン(スマートカードなど)を除くすべてのマシンで暗号が遅すぎ、暗号のセキュリティマージンが小さすぎると考えました。

SAFERアルゴリズムは私有財産ではなく、著作権によって保護されていません。つまり、制限なしで使用できます。これらは完全に単純なバイト操作で構成されているため(キー生成時のバイトローテーションを除く)、これらのアルゴリズムは低ビットプロセッサで実装できます。

MISTY1


1995年にFeistelの「ネストされた」ネットワークに基づいて作成されたブロック暗号化アルゴリズム。 MISTYはMitsubishi Enhanced Security Technologyの略であり、アルゴリズムの作成者の頭文字です:市川哲也、反町淳、時田俊夫、山岸tsu博もアルゴリズムの開発に参加しました。このアルゴリズムは1995年に開発されましたが、ライセンスされ、1996年に公開されました。

MISTY1は、可変ラウンド数のFeistelネットワークです(8を推奨しますが、4の倍数にすることもできます)。このアルゴリズムは64ビットブロックで機能し、128ビットキーを使用します。この暗号は、NESSIE欧州大会で64ビットブロックを暗号化するアルゴリズムの中で勝者となりました。このコンテストのフレームワーク内で実施されたアルゴリズムの分析の結果、その前に、専門家は、このアルゴリズムには深刻な脆弱性はないと結論付けました(彼らは、暗号分析をはるかに困難にするネストされたFeistelネットワークを持つアルゴリズムの構造であると強調しました)。同様の研究が、日本の電子政府向けの暗号アルゴリズムの選択に関するCRYPTRECプロジェクトの一環として実施されました。プロジェクトの専門家は、MISTY1アルゴリズムを非常に肯定的に評価し、高い暗号強度マージンを持っていると結論付けました。アルゴリズムの暗号化速度は高く、ハードウェアの実装に非常に効果的です。

MISTY1は、特許取得済みのアルゴリズムです。ただし、元の特許権者である三菱電機は、無料で使用するライセンスを発行すると発表しました。
MISTY1は、差分および線形暗号解読に対する「実証済みのセキュリティ」の理論に基づいて開発されました。このアルゴリズムは、作成時に知られているさまざまな暗号攻撃に耐えるように設計されました。

Mistyの出版以来、彼のセキュリティレベルを評価するために多くの研究が行われてきました。少ないラウンドでのMistyの調査の結果を以下に示します。

高次差分暗号解析は、程度の低い暗号を効果的にブロックするために適用されます。 Mistyには2つのルックアップテーブルS7とS9が含まれており、両方ともそれぞれ3と2の小さな広告があります。したがって、多くの記事が差分mysti暗号解析に専念しています。 FL関数を使用しない5レベルのアルゴリズムで最良の結果が得られました。ただし、FL関数とその中のワイドビットAND / OR演算の存在が、高階差分暗号解析の使用を大幅に複雑にします。

不可能な微分分析は、各ラウンド(またはn番目のラウンドごと)で同じサブキー値を持つブロックフォントにも適用できます。また、MISTY1にはかなり単純なキー拡張システムがあるため、このアルゴリズムへのこの攻撃の適用可能性を考慮することは非常に自然です。このような攻撃の最良の結果は、FL関数のないアルゴリズムを検討したときにも得られました。

この暗号は、NESSIE European Competition(2000-2003)で64ビットブロックを暗号化するアルゴリズムの中で勝者となりました。この競合のフレームワーク内で行われたアルゴリズムの分析の結果、その前に、専門家は、このアルゴリズムには深刻な脆弱性はないと結論付けました(彼らは、暗号解析をはるかに難しくするネストされたFeistelネットワークを持つアルゴリズムの構造であると強調しました)。

同様の研究が、日本の電子政府向けの暗号アルゴリズムの選択に関するCRYPTRECプロジェクトの一環として実施されました。プロジェクトの専門家は、MISTY1アルゴリズムを非常に肯定的に評価し、高い暗号強度マージンを持ち、アルゴリズムは高い暗号化速度を持ち、ハードウェア実装に非常に効果的であると結論付けました。

このアルゴリズムの変更があります-MISTY2。ただし、暗号強度が低いため、広く知られていませんでした。

また、MISTY1の修正であるアルゴリズムが普及しました。2000年には、モバイル通信を暗号化するためのW-CDMA標準になりました。

KA(日本語from(ひらがなかすみ、ローマ字ka)-霧、霧)は、3GPPセルラーネットワークで使用されるブロック暗号です。 GSMで使用され、GPRSでGEA3で使用される場合、A5 / 3とも呼ばれます。

SUMは、欧州電気通信標準化機構(ETSI)の一部であるSAGE(セキュリティアルゴリズム専門家グループ)によって開発されました。既存のMISTY1アルゴリズムは基礎として採用され、セルラー通信での使用に最適化されています。
2010年に暗号解読者が示したように、変更の過程でMISTY1アルゴリズムの信頼性が低下しました。には特定の種類の攻撃に対する脆弱性がありますが、MISTY1はそれらに耐性があります。

SUMは、8ラウンドFeistelスキームで64ビットブロックサイズと128ビットキーを使用します。各ラウンドでは、128ビットのラウンドキーが使用されます。これは、サブキーを生成するための固定手順によって元のキーから取得された8つの16ビットサブキーで構成されます。

火星


IBMによって開発され、かつてDESを作成したAESの候補コード。 IBMによると、同社の25年にわたる暗号解析の経験はMARSアルゴリズムに組み込まれており、暗号は高い暗号強度とともに、スマートカードに典型的なような限られたフレームでも効果的に実装できます。

暗号に関する多くの記事で知られるLucifer(DES)暗号の著者の1人であるDon Coppersmithは、暗号の開発に参加しました:差分暗号解析、高速行列乗算(Coppersmith-Vinohradアルゴリズム)、RSA暗号解析に対するSブロックの構造の改善。それに加えて、アルゴリズムの開発には、キャロリン・バルビック、エドワード・デビニョン、ロザリオ・ゼナロ、シェイ・ハレビ、チャランジット・ジュトラ、スティーブン・M・マティアス・ミラ、ルーク・オコナー、モハメド・パーベヴィアン、デビッド・サフォード、ネヴェンコ・ズニッチが参加しました。

AESコンテストのルールによると、参加者はアルゴリズムにわずかな変更を加えることができます。このルールを使用して、MARSaの作成者はキー拡張手順を変更し、不揮発性およびランダムアクセスメモリの要件を削減しました。アルゴリズムの修正バージョンを以下に示します。

AESコンテストの結果によると、MARSは決勝に達しましたが、ラインダールに敗れました。結果の発表(2000年5月19日)後、開発チームはAESコンテストについて独自の意見を述べ、子孫への主張についてコメントしました。

現在、MARSはロイヤリティフリーライセンスの下で世界中に配布されています。このアルゴリズムは、暗号化アルゴリズムで使用されるほとんどすべての既存の技術を使用しているという点でユニークです:


ダブルミキシングの使用は、暗号解析では困難です。これは、アルゴリズムの欠点の一部です。同時に、現時点ではアルゴリズムに対する効果的な攻撃はありませんが、一部のキーは弱いサブキーを生成できます。

ロキ


暗号化では、LOKI89とLOKI91はブロック暗号の対称キーであり、DES(データ暗号化)標準の代替として考えられます。暗号は、DESを分析する作業の本体に基づいて開発され、構造がDESに非常に似ています。ロキのアルゴリズムは、スカンジナビアの神話の悪神ロキにちなんで命名されました。

LOKI89は、1990年に最初に公開され、その後オーストラリアの暗号作成者Lori Brown、Joseph Pieprzyk、およびJennifer Seberryによって単に「LOKI」と呼ばれました。 LOKI89は評価のために欧州RIPEプロジェクトに提出されましたが、選択されませんでした。

暗号は64ビットブロックと64ビットキーを使用します。 DESと同様に、これは16ラウンドのFeistelネットワークであり、全体的な構造は似ていますが、特定のSボックス、「P順列」、「拡張順列」の選択とは異なります。 Sボックスは、Josef Pieprzykが開発した非線形性基準を使用して、可能な限り「複雑」かつ「予測不可能」なものにします。それらの有効性は、DES Sボックスのよく知られた設計基準と比較されました。順列は、Sボックスの出力を可能な限り迅速に「ミックス」するように設計されており、良好なFeistel暗号に必要な特性の雪崩と完全性に寄与しています。ただし、DESの同等のものとは異なり、それらは設計分析を支援するために、可能な限りクリーンでシンプルなものになります(振り返ってみると、多分少しシンプルすぎます)。

LOKI89の公開後、新しい差分暗号解析に関する情報が利用可能になり、(Knudsen 1993a)による初期解析の結果もいくつか利用可能になりました。これにより、LOKI91になるように設計が変更されました。

LOKI 91は、LOKI89への攻撃に対応して開発されました(Brown et al。、1991)。変更には、開始キーと終了キーのホワイトニング、新しいSボックスの削除、およびキースケジュールのマイナーな変更が含まれます。より具体的には、Sブロックは修正され、異なる出力が同じ出力(差分暗号化を使用するフック)につながる可能性を最小限に抑えることにより、攻撃の作者によって詳細に説明されているように、この攻撃に対するLOKI91の耐性が向上しました(BihamおよびShamira 1991)。キースケジュールの変更は、「同等の」または「関連付けられた」キーの数を減らすように設計されており、暗号化スペースが削減されています。

結果の暗号はLOKI89よりも明らかに強力で安全ですが、クヌーセンとビハムによって詳細に説明されているように、多くの潜在的な攻撃があります。したがって、これらの暗号は、使用するアルゴリズムではなく、ブロック暗号の開発における科学的進歩の努力と見なされる必要があります。引用数と公開された批判は、この目標が達成されたことを証明しています。

アイデア


スイスの企業Ascomが特許を取得した対称ブロックデータ暗号化アルゴリズム。PGP暗号化ソフトウェアパッケージで使用されることで知られています。2000年11月、IDEAは、欧州委員会のIST(情報社会技術、情報社会技術)プログラムの枠内でNESSIEプロジェクトの候補として紹介されました。
このアルゴリズムの最初のバージョンは、DES(データ暗号化)の代わりとして、1990年にスイス研究所ETHチューリッヒのXuejia LaiとJames Massey(後にAscom-Tech AGに加入したHasler Foundationとの契約の下)によって開発されました。標準、データ暗号化の標準)およびPES(Proposed Encryption Standard、提案された暗号化標準)と呼ばれます。次に、PESの差分暗号解析に関するBehamとShamirの作品の出版後、暗号の安定性を強化するためにアルゴリズムが改良され、IPES(英語の改良提案暗号化標準、改良された暗号化標準)と呼ばれました。 1年後、それはIDEA(English International Data Encryption Algorythm)に改名されました。

IDEAは128ビットキーと64ビットブロックサイズを使用するため、プレーンテキストは64ビットブロックに分割されます。そのようなパーティションが不可能な場合、最後のブロックはビットの特定のシーケンスによってさまざまな方法で補完されます。個々のブロックに関する情報の漏洩を防ぐために、さまざまな暗号化モードが使用されます。暗号化プロセスで使用されるすべての代数演算は16ビット数で実行されるため、元の暗号化されていない64ビットブロックはそれぞれ16ビットの4つのサブブロックに分割されます。IDEAは、暗号化と復号化に同じアルゴリズムを使用します。
アルゴリズムの基本的な革新は、異なる代数群の操作の使用です。


これらの3つの操作は、次の意味で互換性がありません。


これらの3つの操作を使用すると、排他的OR操作のみに基づくDESよりもIDEA暗号解析が難しくなり、Sボックスと置換テーブルの使用も不要になります。IDEAはFeistelネットワークの修正版です。

フェリックス


ワンタイムメッセージ認証コードを使用した高速ストリーム暗号。コードは2004年のeSTREAMコンテストで発表されました。著者はブルース・シュナイアー、ダグ・ウィッティング、ステファン・ラックス、フレデリック・ミュラーです。このアルゴリズムは、232を法とする加算演算、2を法とする加算演算、および循環シフトを備えています。 Phelixは256ビットのキーと128ビットのタイムスタンプを使用します。一部の暗号学者は、暗号が誤って使用された場合に秘密鍵を取得する可能性について懸念を表明しています。
Phelixの前身はHelix暗号であり、最も単純な操作で構築されていましたが、ハッキングされたことが判明しました。高度なHelixの名前はPhelixでしたが、eCryptコンテストで拒否されました。拒否の理由は議論の余地があります-攻撃は他の暗号の弱点であるタイムスタンプの選択に基づいていましたが、開発者は暗号がこの種の攻撃に耐性があると言いました。他の条件で暗号の強度を脅かすことはありませんが、暗号は微分線形暗号解読によってハッキングされることが判明しました。その結果、著者の推定と不注意のために、Phelixは競争の第3ラウンドに認められませんでした。これらすべてに加えて、いくつかの理論的研究が登場し、add-xor-shift操作の混合は必要な非線形性を提供しないと主張されましたが、実際にはハッキングはありませんでした。現在、Phelix設計は、SkeinおよびThreefishで使用するために著者によって提案されています。

著者は、追加の暗号解析を受け取るまでPhelixを使用すべきではないと報告しています。

差分攻撃の著者であるHongjun WuとBart Prenilは、十分な混乱と拡散レイヤーを迂回して、各平文の単語がキーストリームに影響を与えるという懸念を表明します。彼らは、これがHelixとPhelixの構造に固有の欠陥だと主張しています。著者は、Phelixは安全ではないと結論付けています。

al


清水明宏(清水明宏)および宮口正治(NTO従業員)が設計したブロック暗号。

64ビットブロックと64ビットキーを使用します。彼のアイデアは、DESに似たアルゴリズムを作成することですが、より強力なステージ機能を備えています。より少ないステップを使用して、このアルゴリズムはより高速に動作します。さらに、DESとは異なり、FEALのステージ関数はSブロックを使用しないため、アルゴリズムの実装では、置換テーブルを格納するための追加のメモリは必要ありません。

1987年に清水昭宏と宮口正治によって公開されたFEALブロック暗号は、DESと比較して暗号の信頼性を損なうことなく暗号化速度を上げるように設計されました。最初は、アルゴリズムは64ビットブロック、64ビットキー、および4ラウンドの暗号化を使用していました。しかし、すでに1988年にバートデンボーアの研究が発表され、10,000の暗号文で十分であり、選択された平文に基づいて攻撃を成功させることが証明されました。 FEAL暗号を最初に使用したものの1つは、線形暗号解読でした。 1992年を含め、松井満と山岸A宏は、攻撃を成功させるには5つの暗号文を学習するだけで十分であることを証明しました。
発見された脆弱性に対抗するために、作成者はFEAL-8標準を公開することで暗号化のラウンド数を2倍にしました。ただし、1990年には、ヘンリーギルバート(英語版)の脆弱性と、選択されたプレーンテキストに基づく攻撃前のこのコード。それから1992年、松井満と山岸A弘は平文攻撃について説明した。

多数の攻撃が成功したため、開発者は暗号をさらに複雑化することにしました。つまり、1990年にFEAL-Nが導入されました。Nは任意の偶数の暗号化ラウンドであり、FEAL-NXが導入されました。ここで、X(英語拡張から)は128ビットに拡張された暗号キーの使用を示します。ただし、このイノベーションは部分的にしか役立ちませんでした。 1991年、Eli BihamとAdi Shamirは、差分暗号解析法を使用して、徹底的な検索よりも速く暗号を破る可能性を示しました。

それにもかかわらず、コミュニティによる暗号化アルゴリズムの研究の強さのおかげで、線形および差分暗号解析に対する暗号の脆弱性の境界が証明されました。線形暗号解読に対するラウンド数が26を超えるアルゴリズムの安定性は、森井志穂、青木一mar、大田一雄(森合志保、青木一mar、太田和夫)の作品、青木一mar、小林邦男、森井志穂(青木一郎)の作品で示されています小林、森井志穂)は、32ラウンド以上の暗号化を使用するアルゴリズムに差分暗号解析を適用することは不可能であることを証明しました。

FEAL暗号は非常に早い時期に開発されたという事実により、世界中の暗号学者のためのトレーニングの優れたオブジェクトとして機能しました。

さらに、彼の例を使用して線形暗号解読が発見されました。線形暗号解読の発明者である松井満は、この主題に関する最初の研究でFEALとDESを検討しました。

ツーキー宇宙船


RSA


RSAは、Rivest、Shamir、およびAdlemanという名前の略語で、大整数因数分解問題の計算の複雑さに基づく公開鍵暗号アルゴリズムです。 1977年にマサチューセッツ工科大学のRon Rivest、Adi Shamir、およびLeonard Adlemanによって説明されました。

RSA暗号システムは、暗号化とデジタル署名の両方に適した最初のシステムです。このアルゴリズムは、PGP、S / MIME、TLS / SSL、IPSEC / IKEなどを含む多数の暗号化アプリケーションで使用されます。 Rivest-Shamir-Adleman(RSA)アルゴリズムは、最も一般的で安全な公開キー暗号化方式の1つです。このアルゴリズムは、非常に大きな(100〜200桁の)数字を説明する効果的な方法がないという事実に基づいています。

RSAキーは次のように生成されます。

  1. p そして q (, 1024 ).
  2. n=pq , .
  3. :
    φ(n)=(p1)(q1)
  4. e1<e<φ(n) ), φ(n) φ(n)e , , , 17, 257 65537.

    • e (. public exponent)
    • , , e
    • e , 3, RSA.

  5. d , e φ(n) , , : de1(modφ(n)).
    . , .
  6. { e,n } RSA.
  7. { d,n }はRSA秘密鍵の役割を果たし、秘密にされます。

RSAセキュリティは、大きな整数を因数分解する計算の複雑さに依存します。計算能力が向上し、より効果的なファクタリングアルゴリズムが識別されると、数および大きな数を増やす能力も向上します。暗号化はキーのサイズに直接関連付けられ、キーの長さを2倍にすると、パフォーマンスは低下しますが、強度が指数関数的に増加します。

JavaScriptの動作例
'use strict';

/**
* RSA hash function reference implementation.
* Uses BigInteger.js https://github.com/peterolson/BigInteger.js
* Code originally based on https://github.com/kubrickology/Bitcoin-explained/blob/master/RSA.js
*
* @namespace
*/
var RSA = {};

/**
* Generates a k-bit RSA public/private key pair
* https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Code
*
* @param {keysize} int, bitlength of desired RSA modulus n (should be even)
* @returns {array} Result of RSA generation (object with three bigInt members: n, e, d)
*/
RSA.generate = function (keysize) {
/**
* Generates a random k-bit prime greater than √2 × 2^(k-1)
*
* @param {bits} int, bitlength of desired prime
* @returns {bigInt} a random generated prime
*/
function random_prime(bits) {
var min = bigInt(6074001000).shiftLeft(bits-33); // min ≈ √2 × 2^(bits - 1)
var max = bigInt.one.shiftLeft(bits).minus(1); // max = 2^(bits) - 1
while (true) {
var p = bigInt.randBetween(min, max); // WARNING: not a cryptographically secure RNG!
if (p.isProbablePrime(256)) return p;
}
}

// set up variables for key generation
var e = bigInt(65537), // use fixed public exponent
p, q, lambda;

// generate p and q such that λ(n) = lcm(p − 1, q − 1) is coprime with e and |pq| >= 2^(keysize/2 - 100)
do {
p = random_prime(keysize / 2);
q = random_prime(keysize / 2);
lambda = bigInt.lcm(p.minus(1), q.minus(1));
} while (bigInt.gcd(e, lambda).notEquals(1) || p.minus(q).abs().shiftRight(keysize/2-100).isZero());

return {
n: p.multiply(q), // public key (part I)
e: e, // public key (part II)
d: e.modInv(lambda) // private key d = e^(-1) mod λ(n)
};
};

/**
* Encrypt
*
* @param {m} int / bigInt: the 'message' to be encoded
* @param {n} int / bigInt: n value returned from RSA.generate() aka public key (part I)
* @param {e} int / bigInt: e value returned from RSA.generate() aka public key (part II)
* @returns {bigInt} encrypted message
*/
RSA.encrypt = function(m, n, e){
return bigInt(m).modPow(e, n);
};

/**
* Decrypt
*
* @param {c} int / bigInt: the 'message' to be decoded (encoded with RSA.encrypt())
* @param {d} int / bigInt: d value returned from RSA.generate() aka private key
* @param {n} int / bigInt: n value returned from RSA.generate() aka public key (part I)
* @returns {bigInt} decrypted message
*/
RSA.decrypt = function(c, d, n){
return bigInt(c).modPow(d, n);
};



DSA


DSAは公開鍵を使用して電子署名を作成する暗号化アルゴリズムですが、暗号化用ではありません(RSAやEl-Gamalスキームとは異なります)。署名は秘密に作成されますが、公に検証することができます。これは、1つのサブジェクトのみがメッセージ署名を作成できるが、誰でもその正当性を検証できることを意味します。このアルゴリズムは、有限体の対数を取る計算の複雑さに基づいています。

このアルゴリズムは、1991年8月に米国国立標準技術研究所(米国)によって提案され、特許を取得しています; NISTは、この特許をロイヤリティなしで使用できるようにしました。 DSAは、1998年12月15日に最初に公開されたDSSの一部です。標準は、FIPS-186-4の最新バージョンである数回更新されています。

DSAには、メッセージ署名の作成(S)と検証(V)の2つのアルゴリズム(S、V)が含まれています。

両方のアルゴリズムは、最初に暗号化ハッシュ関数を使用してメッセージハッシュを計算します。アルゴリズムSはハッシュと秘密鍵を使用して署名を作成し、アルゴリズムVはメッセージハッシュ、署名、および公開鍵を使用して署名を検証します。

実際、署名されるのは(任意の長さの)メッセージではなく、そのハッシュ(160-256ビット)です。

メッセージは、次のアルゴリズムに従って署名されます。


  1. 乱数の選択 k(0;q)
  2. 計算 r=(gkmodp)modq
  3. 計算 s=(k1(H(m)+xr))modq
  4. 別のものを選ぶ k それが判明した場合 r=0 または s=0
  5. 署名は数字のペアです (r,s)

署名の検証署名の

検証は、アルゴリズムに従って実行されます。

  1. 計算 w=s1modq
  2. 計算 u1=(H(m)w)modq
  3. 計算 u2=(rw)modq
  4. 計算 v=((gu1yu2)modp)modq
  5. 署名は次の場合に真です v=r

DSA署名を作成および検証する
 #include < CkCrypt2 .h> #include < CkDsa .h> void ChilkatSample ( void ) { bool ; //  Chilkat Crypt    . //    crypt  DSA. CryptCrypt2 crypt; success = crypt. UnlockComponent ( «  30-   » ); if (success! = true ) { std :: cout << crypt. lastErrorText () << "\ r \ n";  ; } . put_EncodingMode ( "hex" ); . put_HashAlgorithm ( "sha-1" ); //   SHA-1 .     . //  Chilkat Crypt   ,  //  ,     //  . // 20- SHA-1        . const char * hashStr = crypt. hashFileENC ( "hamlet.xml" ); CkDsa dsa; //    DSA   PEM. Chilkat DSA //          DSA     PEM  DER. //  LoadText    .   //        PEM  // . const char * pemPrivateKey = 0; pemPrivateKey = dsa. loadText ( "dsa_priv.pem" ); success = dsa. FromPem (pemPrivateKey); if (success! = true ) { std :: cout << dsa. lastErrorText () << "\ r \ n";  ; } //     ,  ,     // DSA-. success = dsa. VerifyKey (); if (success! = true ) { std :: cout << dsa. lastErrorText () << "\ r \ n";  ; } //       DSA: success = dsa. SetEncodedHash ( "hex" , hashStr); if (success! = true ) { std :: cout << dsa. lastErrorText () << "\ r \ n";  ; } // ,   DSA    ,   , //     : success = dsa. SignHash (); if (success! = true ) { std :: cout << dsa. lastErrorText () << "\ r \ n";  ; } //  SignHash ,  DSA   //.          base64- . (          //  «».) Const char * hexSig = dsa. getEncodedSignature ( "hex" ); std :: cout << ":" << "\ r \ n"; std :: cout << hexSig << "\ r \ n"; // ------------------------------------------------ ----------- //  2.   DSA // ---------------------------- ------------------------------- CkDsa dsa2; //    DSA  : const char * pemPublicKey = 0; pemPublicKey = dsa2. loadText ( "dsa_pub.pem" ); success = dsa2. FromPublicPem (pemPublicKey); if (success! = true ) { std :: cout << dsa2. lastErrorText () << "\ r \ n";  ; } //     . success = dsa2. SetEncodedHash ( "hex" , hashStr); if (success! = true ) { std :: cout << dsa2. lastErrorText () << "\ r \ n";  ; } //  : success = dsa2. SetEncodedSignature ( "hex" , hexSig); if (success! = true ) { std :: cout << dsa2. lastErrorText () << "\ r \ n";  ; } // Verify: success = dsa2. Verify (); if (success! = true ) { std :: cout << dsa2. lastErrorText () << "\ r \ n"; } else { std :: cout << «  DSA!» << "\ r \ n"; } } 


エルガマル


1985年にEl Gamalによって提案された非対称アルゴリズムは普遍的です。データの暗号化、デジタル署名の生成、共通キーのネゴシエーションの3つの主要な問題すべてを解決するために使用できます。さらに、パスワード検証スキームのアルゴリズム、メッセージIDの証明、およびその他のオプションの変更が可能です。このアルゴリズムとDiffie-Hellmanアルゴリズムのセキュリティは、離散対数の計算の難しさに基づいています。このアルゴリズムは、実際にDiffie-Hellmanスキームを使用して、互いにメッセージを送信するサブスクライバー用の共有秘密キーを生成し、メッセージにこのキーを掛けて暗号化します。
また、暗号化の場合、およびデジタル署名の形成の場合、各ユーザーはキーペアを生成する必要があります。これを行うには、Diffie-Hellmanスキームのように、大きな素数が選択されます と数 、異なる次数Aが異なるモジュロ数を表す 番号PとAはクリアテキストで送信でき、すべてのネットワーク加入者に共通です。

次に、グループの各加入者が自分の秘密番号を選択しますi,1<i<1$ 、および対応する公開番号を計算します Yi:Yi=AXimodP したがって、各ユーザーは秘密鍵を生成できます i および公開鍵 Yi

ラビン


このアルゴリズムは、マイケルO.ラビンによって1979年1月に公開されました。Rabin暗号システムは、暗号化されたテキストからすべてのプレーンテキストを回復することをファクタリングと同じくらい証明できる最初の非対称暗号システムでした。

鍵の生成:


2つの大きな異なる数値pおよびqを選択します。選べますpq3 mod 4pおよびqを法とする平方根の計算を単純化するため(以下を参照)。ただし、このスキームはどのストロークでも機能します。

させてn= p  q、nは公開鍵です。素数p そして q秘密鍵です。

メッセージの暗号化には公開鍵のみが必要ですn 暗号文を解読するには、要素が必要です p そして qn

キー生成

  1. 次の要件を考慮して、2つの乱数pとqが選択されます。
  2. 数値は大きくする必要があります(ビット深度を参照)。
  3. 数値は素数でなければなりません。
  4. 条件を満たす必要があります。 pq3mod4

これらの要件を満たすことで、pおよびqを法とする根の抽出手順が大幅に加速されます。
数が計算されますn=pq ;

  1. 番号nは公開鍵です。
  2. 番号pとqは閉じています。

暗号化

元のメッセージm(テキスト)は、次の式に従って、公開キー-番号nを使用して暗号化されます。c=m² mod n.
モジュロ乗算を使用しているため、後者の場合は小さな指数値が選択されていても、Rabinシステムの暗号化速度はRSA暗号化速度よりも高速です。

復号
化メッセージを復号化するには、秘密鍵-番号pおよびqが必要です。復号化プロセスは次のとおりです。

  1. まず、ユークリッドアルゴリズムを使用し、方程式からypp+yqq=1 番号を見つける yp そして yq ;
  2. さらに、中国の剰余定理を使用して、4つの数値が計算されます。

    r=(yppmq+yqqmp)modnr=nrs=(yppmqyqqmp)modns=ns

これらの数字の1つは、真の平文mです。

PS誰もが興味を持っている場合、この記事に記載されているほぼすべてのアルゴリズムには、C、C ++、またはアセンブラー(一部の言語)の実装を含むアーカイブがあり、実装は私のものではなく、使用する可能性が高いと言えます誰が知っていますが。

PPS比較表を作成するというアイデアもありましたが、まず、どのパラメーターで比較したいのかを知りたいと思います。

PPPS記事コンテスト「Netologii」、サイトへのリンク、ブログへのリンク

Source: https://habr.com/ru/post/J336578/


All Articles