シングルテーブル置換暗号

シングルテーブル置換暗号

CTF-ウィキに転載:個人的に私は非常によく書かれていることだと思います

https://ctf-wiki.github.io/ctf-wiki/

クラシックパスワード

古典暗号では、我々は、単一のテーブル置換暗号、マルチテーブル交換用パスワードだけでなく、他のもっと面白いパスワードのいくつかをご紹介します。

それは、古典的な暗号で、その言及する価値がある、デザイナーの主な考慮事項メッセージの機密性は、唯一の人々は、整合性とメッセージの否認防止のために、メッセージの内容を取得するために暗号文を復号化できるキーを関連付けられているように行われていません多くの考察。

単一のテーブル置換暗号の一般的特性

また、単一の暗号化テーブル、ほぼすべての暗号化方法は、1つの暗号文に次のものであること、共通しています。だから、一般的には亀裂には2つの方法があります

  • 小さなキースペース、ブルートフォース方法の使用に
  • 暗号文の長さが十分に長い時間、単語頻度分析の使用、http://quipqiup.com/

鍵空間が十分な大きさで、暗号文が十分に短い場合、破ることは困難です。

シーザー暗号

原則

場合(シーザー)が暗号シーザー暗号は、平文であろう各文字を逆方向(または順方向)アルファベットの順序に従っている固定数(サイクリックシフト)暗号化されたテキストとして。例えば、オフセットされているが(キーが3復号化される)、3時間だけ左シフトしたとき:

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

使用時には、各暗号化は、メッセージ内の平文アルファベット文字を暗号化する位置を見つけ、対応する暗号文アルファベットの文字を書くこと。その他には、元の平文を得るために、今度は、操作に応じて、事前に知られている復号鍵を必要としています。例えば:

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

シフト量に応じて、そこにあるいくつかの特定のシーザーコード名

  • 10オフセット:Avocat(A→K)
  • 13オフセットです:ROT13
  • オフセット-5:カシス(K 6)
  • オフセット-6:カセット(K 7)

また、キーベースのシーザー暗号キー付きシーザーがあります。基本原理は、キーの使用、各キーは(典型的にはアルファベットに対応するデジタルシーケンスに)数値に変換され、それぞれの図は、各平文アルファベットを暗号化するための鍵となりました。

ここでXMANサマーキャンプシェアゲームカンフーパオチキンチーム暗号100は、一例を紹介します。

密文:s0a6u3u1s0bv1a
密钥:guangtou
偏移:6,20,0,13,6,19,14,20
明文:y0u6u3h1y0uj1u

亀裂

キーなしのシーザー暗号の場合は、その基本的な方法は、亀裂には2つの方法があります。

  1. 一般的な条件のオフセット26トラバース
  2. 暗号文のための使用頻度は長いです。

このうち、最初のアプローチは確かにプレーンテキストであること、そして第二の方法は、右の平文を得るために、必ずしもではありません。

キーベースのシーザー暗号については、一般的には、対応するキーを知っている必要があります。

ツール

一般的に、我々はJPKより一般的な、次のツールを持っています。

シフト暗号

そして、シーザー暗号は、シフトのみ文字、数字、特殊文字のパスワードを扱うないことを除いて、類似している一般的に使用されるASCIIコード表のシフトに対処します。また、可能な結果を​​得るために、あらゆる可能性を打破する方法です。

Atbash暗号

原則

Atbashコード(Atbash暗号)は、実際には以下のものを導入するための簡単な換字式暗号の特殊な場合とみなすことができ、それは最後の文字は、アルファベットの最初の文字を表す使用し、最後の文字に対して第二には、第二の文字を表します。ローマ字では、それが浮上しています:

明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

例を以下に示します:

明文:the quick brown fox jumps over the lazy dog
密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt

亀裂

鍵空間が十分に短く、暗号文が十分な長さであるとき、まだ言葉周波数解析法を解決するために使用することができることがわかります。

ツール

シンプルな換字式暗号

原則

単純な換字式暗号(単純な置換暗号)暗号化は、一意それ文字と異なる文字に対応する各平文を置き換えます。これは、シーザーとパスワードの間の差は、アルファベットのパスワード文字は、それがより困難シーザー暗号よりもクラックすることができ、簡単なシフトが、完全に混乱、ではないです。例えば:

明文字母 : abcdefghijklmnopqrstuvwxyz
密钥字母 : phqgiumeaylnofdxjkrcvstzwb

Pに対応する、時間に対応する、などの研究開発。

明文:the quick brown fox jumps over the lazy dog
密文:cei jvaql hkdtf udz yvoxr dsik cei npbw gdm

そして、復号化は、我々は一般的に、彼らが正常に復号化することができる前に、ルールを対応する各文字を知っています。

亀裂

そのキー番号のすべてで、この暗号化の方法の結果であるため、\(26!\) 暴力のソリューションを使用することはほとんど不可能です。したがって、我々は、一般的に単語の頻度分析を使用しています。

ツール

アフィン暗号

原則

アフィン暗号の暗号化関数である\(E(X)=(AX + B)\ PMOD M \) 前記

  • \(X \)特定の符号化により得られたデジタル平文を表します
  • \(A \)\(M \)互いに素
  • \(M \)符号化システム内の文字の数です。

復号関数である- ({1}(XB)\ PMOD M \ D(X)= A ^)\、ここで\(^ { - 1} \) である\(A \)\(\ mathbb {Z} _ {M} \)グループ逆数。

ここで\(E(x)=( + 8 5X)\ 26 \をBMOD) 関数は、一例として記載されている、暗号化文字列はAFFINE CIPHER、ここでは、アルファベット符号化システムの26の文字として直接使用しました

はっきりと A F F N E C P H E R
バツ 0 5 5 8 13 4 2 8 15 7 4 17
\(Y = 5×8 + \) 8 33 33 48 73 28 18 48 83 43 28 93
\(と\ mod26 \) 8 7 7 22 21 2 18 22 5 17 2 15
暗号文 H H W V C S W F R C P

これに相当する暗号化の結果IHHWVCSWFRCP

復号処理のために、AおよびBを有する通常のクラッカーは、計算することができる\({ - 1} ^ \) 復号関数であるので、21である(D(X)= 21 \ (X-8)\ PMOD {26 } \) 次のように復号化

暗号文 H H W V C S W F R C P
\(と\) 8 7 7 22 21 2 18 22 5 17 2 15
\(X = 21(Y-8)\) 0 -21 -21 294 273 -126 210 294 -63 189 -126 147
\(X \ mod26 \) 0 5 5 8 13 4 2 8 15 7 4 17
はっきりと A F F N E C P H E R

ことを特徴とそれだけで26文字ことがわかります。

亀裂

それはまた、最も汎用性の高い機能を備えていますので、まず第一に、私たちは、結果の暗号文は必ずしも同じではないことを、任意の二つの異なる文字のためにそのアフィンパスワードを見ることができます。暗号文の長さが十分な長さである場合には、我々は解決するために、周波数解析法を使用することができます。

第二に、我々はパスワードを攻撃する方法を検討することができます。それがわかるように\(A = 1 \) アフィン暗号の暗号化シーザー。文字セットが使用アルファベットのみ一般26、そしてある一般的に言えば、我々アフィンパスワードではなく、26以上の素数26、の合計
\ [\ピピ島(26) = \ PHI(2)\回
\ PHI(13)= 12 \] カウントが可能なキーの総容量であり、Bはオフセットされてもよい
[\ 12 \回26 = 312
\] のために、一般的にこの種のコードは、我々は、彼らが既知平文の場合には、少なくとも攻撃することができます前にする必要があります。以下の簡単な分析。

パラメータのいずれかが、その後、私たちは簡単にすばやく答えを得る別の引数を列挙することができる場所私たちが知っている場合は、このパスワードは、2種類のパラメータによって制御されています。

しかし、我々はすでにここに文字セットを使用する、26文字の仮定は、我々は復号化するための別の方法を持っていることを、我々は唯一の暗号化後の二文字を知っている必要があります知っているとしましょう(Y_1、Y_2 \)\復号化することができます。その後、我々は知ることができる
[Y_1 =(ax_1 + B \
)\ PMOD {26} \\ Y_2 =(ax_2 + B)\ PMOD {26} \] 2つの減算器、利用可能な
(\ [Y_1-Y_2 = A X_1、X_2)\ PMOD {26
} \] ここで(Y_1、Y_2 \)\知られており、我々が知っている場合、2つの異なる暗号文対応する文字\(X_1 \)\(X_2 \) 我々は容易に得ることができる\(\) さらに取得することができる\(B \)

ここでは、例として説明super_expressの2016はTWCTF。ソースコードを見てシンプル

import sys
key = '****CENSORED***************'
flag = 'TWCTF{*******CENSORED********}'

if len(key) % 2 == 1:
    print("Key Length Error")
    sys.exit(1)

n = len(key) / 2
encrypted = ''
for c in flag:
    c = ord(c)
    for a, b in zip(key[0:n], key[n:2*n]):
        c = (ord(a) * c + ord(b)) % 251
    encrypted += '%02x' % c

print encrypted

我々は慎重に分析する場合は、各文字暗号n回内のフラグのため、我々は見ることができるが、見つけることができる
\ [{ALIGN *}開始\ C_1&= a_1c + B_1 \\ C_2&= a_2c_1 + B_2 \\&= a_1a_2c + a_2b_1 + B_2 \\&=
KC + D \端{ALIGN *} \] 2行目の導出、実際には、我々が得ることができる\(C_N \)もまた、この形態のように見ることができる\(C_N = XC + Y- \) そして私たちが知ることができるが、その場合、キーは実際には、これはアフィンパスワードですので、こと、変更されることはありません。

また、タイトルはまた、私たちは簡単に次のコードを使用して、攻撃の方法既知平文攻撃を使用することができ、暗号文と暗号文平文に対応する部分が与えられます

import gmpy

key = '****CENSORED****************'
flag = 'TWCTF{*******CENSORED********}'

f = open('encrypted', 'r')
data = f.read().strip('\n')
encrypted = [int(data[i:i + 2], 16) for i in range(0, len(data), 2)]
plaindelta = ord(flag[1]) - ord(flag[0])
cipherdalte = encrypted[1] - encrypted[0]
a = gmpy.invert(plaindelta, 251) * cipherdalte % 251
b = (encrypted[0] - a * ord(flag[0])) % 251
a_inv = gmpy.invert(a, 251)
result = ""
for c in encrypted:
    result += chr((c - b) * a_inv % 251)
print result

結果は以下の通りであります

➜  TWCTF2016-super_express git:(master) ✗ python exploit.py
TWCTF{Faster_Than_Shinkansen!}

最後に、暗号化運動は、サイトをお勧めします:https://cryptopals.com/

おすすめ

転載: www.cnblogs.com/v01cano/p/11929536.html