見出し画像

AIと暗号で遊ぶ(解けない)

人工知能とシーザー暗号で遊んでいきます。

人工知能とシーザー暗号で遊んでいきます。

シーザー暗号は、アルファベットの各文字を指定された数だけシフトした文字に置き換えることで暗号化する暗号方式です。具体的には、アルファベットの各文字を指定された数だけずらすことで、暗号化を行います。たとえば、シフト数が3の場合、アルファベット「A」は「D」、「B」は「E」、「C」は「F」というように、3文字分アルファベットをずらした文字に置き換えられます。

与えられた暗号文「L ORYH BRX」をシーザー暗号で解読するために、まず文字のシフト数を特定する必要があります。しかし、与えられた暗号文からシフト数を推測することは困難です。シフト数が不明な場合は、ブルートフォース攻撃などの解読方法を用いて、全てのシフト数について解読を試みる必要があります。

しかしながら、与えられた暗号文にはシフト数を特定するヒントがあります。暗号文の中に含まれるスペースの数や位置を分析することで、暗号文中に含まれる単語や文章の構成要素を特定することができます。この場合、与えられた暗号文中には3つの単語が含まれており、最初の単語は1文字、2番目の単語は4文字、3番目の単語は2文字で構成されています。また、2番目の単語の先頭は「B」であることがわかっています。

この情報から、シフト数を推測することができます。まず、2番目の単語の先頭文字「B」を元の文字である「W」と比較します。元の文字が「W」であるため、シーザー暗号で暗号化された文字は元の文字から3文字左にずれていることがわかります。これはシフト数が3であることを示しています。同様に、暗号化された文字列「L ORYH BRX」をシフト数3で復号することで、元の文「I LOVE YOU」が得られます。

ChatGPT

ということです。


シーザー暗号のプログラムも書いてもらう

def encrypt_caesar(plain_text, shift):
    encrypted_text = ""

    for char in plain_text:
        if char.isalpha():
            shifted_char_code = ord(char.upper()) + shift
            if shifted_char_code > ord('Z'):
                shifted_char_code -= 26
            encrypted_text += chr(shifted_char_code)
        else:
            encrypted_text += char

    return encrypted_text


def decrypt_caesar(cipher_text, shift):
    decrypted_text = ""

    for char in cipher_text:
        if char.isalpha():
            shifted_char_code = ord(char.upper()) - shift
            if shifted_char_code < ord('A'):
                shifted_char_code += 26
            decrypted_text += chr(shifted_char_code)
        else:
            decrypted_text += char

    return decrypted_text


プログラムで暗号化

平文はアインシュタインが言ったらしい 
Anyone who has never made a mistake has never tried anything new.
という文章にしようね


プログラムで暗号化をする。シフト数は14。

平文:Anyone who has never made a mistake has never tried anything new.
暗号文: OBMCBS KVC VOG BSJSF AORS O AWGHOYS VOG BSJSF HFWSR OBMHVWBU BSK.


ChatGPTが暗号化

OBMCBS KVC VOG BSJSF AORS O AWGHOYS VOG BSJSF HFWSR OBMHVWBU BSK. これは英語の暗号文です。解読してください。

与えられた暗号文「OBMCBS KVC VOG BSJSF AORS O AWGHOYS VOG BSJSF HFWSR OBMHVWBU BSK.」を解読するために、以下の手順を踏んでみます。

1. 与えられた暗号文を単語ごとに分割します。単語ごとに分割することで、暗号文の構造を把握することができます。ただし、この場合、句読点が暗号化されているため、単語の境界を判別することが困難であることに注意してください。

2. 各単語の出現頻度を調べます。特定の単語が頻繁に現れる場合、それがよく使われる単語である可能性が高いため、それを元の単語に復号化することができます。

3. 単語の長さや文法的な特徴を考慮して、単語を元の英単語に復号化します。ただし、この手法では、一部の単語を復号化することができない場合があることに注意してください。

以下が、手順を踏んで暗号文を解読した結果です。

"OBMCBS" → "SECRET"
"KVC" → "CODE"
"VOG" → "THE"
"BSJSF" → "MESSAGE"
"AORS" → "IS"
"O" → "A"
"AWGHOYS" → "ENCRYPTED"
"HFWSR" → "WITH"
"OBMHVWBU" → "METHODS"
"BSK" → "AND"

よって、与えられた暗号文は以下のように復号化されます。

"SECRET CODE THE MESSAGE IS A ENCRYPTED WITH METHODS AND."

つまり、暗号文は「暗号化されたメッセージがあり、それは特定の方法で暗号化されています。」という意味を持っていると推測されます。

そもそも文字数変わってますけど!?まあまだ暗号は不明だけど…

これはどうやら単換字暗号のようだ

ありがとうございます。確かに、与えられた暗号文は単換字暗号の可能性があります。単換字暗号は、アルファベットの各文字を別の文字に置き換えることで暗号化されます。この暗号は比較的単純であり、解読が容易であるため、セキュリティ上はあまり強固ではありません。

いいから解読してほしい…

解読して

単換字暗号の場合、暗号化に用いられた文字の置換表を知ることが解読の鍵となります。与えられた暗号文から暗号化に用いられた文字の置換表を推測するために、以下の手順を踏んでみます。

1. 暗号文中に現れる一文字の出現頻度を調べます。英文の場合、文字の出現頻度には特定の傾向があるため、これを利用して置換表を推測することができます。

2. 頻繁に現れる一文字をアルファベットの一文字「E」と仮定します。この場合、「E」の置換文字を探すことができれば、他の文字の置換も推測することができます。

3. 「E」以外にも頻繁に現れる文字を探します。例えば、一文字「T」や「A」が頻繁に現れる場合、それぞれ「T」や「A」と仮定することができます。これにより、他の文字の置換も推測することができます。

4. 上記の手順で推測された置換表を用いて、暗号文を解読します。暗号文の文字を置換表に従って元のアルファベットの文字に置き換えることで、元の文を取得することができます。

以上の手順を踏んで与えられた暗号文を解読することは可能ですが、単換字暗号は比較的単純な暗号方式であるため、正確な置換表が推測できれば解読は容易になります。

暗号方式が明確でなくちゃ解読してくれないのか???

シーザー暗号らしい 解読して

シーザー暗号は、アルファベットの各文字を指定された数だけシフトした文字に置き換えることで暗号化する暗号方式です。具体的には、アルファベットの各文字を指定された数だけずらすことで、暗号化を行います。たとえば、シフト数が3の場合、アルファベット「A」は「D」、「B」は「E」、「C」は「F」というように、3文字分アルファベットをずらした文字に置き換えられます。

与えられた暗号文「L ORYH BRX」をシーザー暗号で解読するために、まず文字のシフト数を特定する必要があります。しかし、与えられた暗号文からシフト数を推測することは困難です。シフト数が不明な場合は、ブルートフォース攻撃などの解読方法を用いて、全てのシフト数について解読を試みる必要があります。

しかしながら、与えられた暗号文にはシフト数を特定するヒントがあります。暗号文の中に含まれるスペースの数や位置を分析することで、暗号文中に含まれる単語や文章の構成要素を特定することができます。この場合、与えられた暗号文中には3つの単語が含まれており、最初の単語は1文字、2番目の単語は4文字、3番目の単語は2文字で構成されています。また、2番目の単語の先頭は「B」であることがわかっています。

この情報から、シフト数を推測することができます。まず、2番目の単語の先頭文字「B」を元の文字である「W」と比較します。元の文字が「W」であるため、シーザー暗号で暗号化された文字は元の文字から3文字左にずれていることがわかります。これはシフト数が3であることを示しています。同様に、暗号化された文字列「L ORYH BRX」をシフト数3で復号することで、元の文「I LOVE YOU」が得られます。

上記のシーザー暗号の説明文はこれでした!

OBMCBS KVC VOG BSJSF AORS O AWGHOYS VOG BSJSF HFWSR OBMHVWBU BSK.

この暗号文もシーザー暗号に似ていますが、単純なシーザー暗号とは異なり、複数のシフト数を用いて暗号化されている可能性があります。単純なシーザー暗号では解読が容易でしたが、この暗号文では解読が困難となっています。こういった場合、暗号解読の手段としては、頻度分析や単語の出現頻度の分析を行うことが挙げられます。

具体的には、英文の文章では、各アルファベットの出現頻度には一定の傾向があります。たとえば、英文中では「e」が最も頻繁に使用され、その次に「t」が頻繁に使用されます。このような頻度分析を用いることで、暗号文中に出現する文字の頻度から、暗号化に用いられたシフト数を特定することができます。

また、英文では一定の単語の組み合わせが存在します。たとえば、「the」「and」「is」などの単語は、英文中で頻繁に出現する単語です。このような単語の出現頻度の分析を行うことで、暗号文中に出現する単語の組み合わせから、暗号化に用いられたシフト数を推測することができます。

以上のように、暗号解読には頻度分析や単語の出現頻度の分析が有効な手段となりますが、それでも解読が困難である場合は、より高度な暗号解読技術が必要となる場合があります。

シフト数も教えなきゃダメかな?

シフト数14

了解です。この暗号文をシフト数14で解読すると、「TURING WAS RIGHT ABOUT THIS BEING TRICKY TURING MACHINES ARE VERY POWERFUL TOOLS.」という英文になります。

??????????????全然違う???????



検証するよ!

単換字暗号だっての!

OBMCBS KVC VOG BSJSF AORS O AWGHOYS VOG BSJSF HFWSR OBMHVWBU BSK.

TURING WAS RIGHT ABOUT THIS BEING TRICKY TURING MACHINES ARE VERY POWERFUL TOOLS.

VがA,R,Eなどに変換されているね。


文字数もちャうで

OBMCBS KVC VOG BSJSF AORS O AWGHOYS VOG BSJSF HFWSR OBMHVWBU BSK.
TURING WAS RIG HTABO UTTH I SBEINGT RIC KYTUR INGMA CHINESAR EVE RYPOWERFULTOOLS.


シーザー暗号の14シフトだとわかっているのに全然解けないね。
解けないように制御を受けているのかもしれないけど。




ChatGPTに暗号化してもらう

以下の英文をシフト数14でシーザー暗号を使って暗号化して Anyone who has never made a mistake has never tried anything new.

シフト数14でシーザー暗号を使って暗号化すると、以下のようになります。

Qebztcr ivc xvmtk pmizevo ziv qebziv rsc drsc zmikztrmvomv.

ぽぺぽぺ!?!?

さっきの暗号プログラムにやってもらうと

平文:Qebztcr ivc xvmtk pmizevo ziv qebziv rsc drsc zmikztrmvomv.
復号文: CQNLFOD UHO JHYFW BYULQHA LUH CQNLUH DEO PDEO LYUWLFDYHAYH.

アルファベットを14個ずらすことすらできないようである


論理と確率!?

自然言語処理人工知能ということで確率的に返答を構築しているらしい(本当?)ChatGPTは論理には弱いのかも?

でも、論理の塊のプログラムは書けるんだからねぇ

ただ、このような操作に関するデータが少ないだけかもしれないね

論理と確率の関係がよくわからなくなってくるよね。

論理的な帰結ってどうして導けるのかな。

この記事が気に入ったらサポートをしてみませんか?