最近覚えた暗号を使ってみました。
— あいり (@Irene_Riddler) June 12, 2020
数字には色んな意味を持ったものがあって面白いですよね😊✨#あいり謎#解けたらRT#今日は何の日#返事は2を付けて pic.twitter.com/J8Tc38f3Ti
右下にRSAとあるように、RSAの変換方式でデコードする問題です。
とはいえ、このような数値変換だけをやってくれるようなツールはあまりないので、仕組みを理解した上で手計算することが想定されていると思います。
ちなみに私のサイト Cryptobrella.app にはこういうものも計算できるツールがあります。
https://www.cryptobrella.app/rsa
さて、この2, 12, 1をmodulo = 15, exponential = 7をRSA変換でエンコードされたものとしてデコードします。
それはつまり、2をデコードするのであれば X^7 ≡ 2 (mod 15)となるようなXを求めればよいことになります。
実際のRSA暗号ではこの15の部分が非常に大きい合成数であり、その素因数を求めることが原理上非常に計算時間がかかることから暗号としての秘匿性が成立しています。しかし今回はmoduloは小さな数ですから、素因数分解に頼らずとも1~14の7乗を計算すれば十分間に合います。
15くらいだと省力になるのかも分かりませんが、せっかくなので15の素因数分解を利用した計算方法を試してみましょう。
素数pを法とする場合は0以外の数はp-1乗で≡1になるので、
X^7 ≡ X (mod 3)
X^7 ≡ X^3 (mod 5)
そのため、15通りの数を7乗まで計算しなくても、mod 3の1乗(計算不要)、mod 5の3乗を求めてそれらを組み合わせるだけでほしい数が求まります。
計算して、mod 5 で X≡1,2,3,4に対して、X^3 ≡ 1, 3, 2, 4 です。
15で割って2になるということは、3で割っても5で割っても2になるということなので、X^7が3で割っても5で割っても2になるのはX≡2 (mod 3)、X≡3 (mod 5)の時。なので、X≡8 というのが分かります。
同様に、15で割って12になるのは3で割って0, 5で割って2なのでX≡0 (mod 3)、X≡3 (mod 5)、よってX≡3。
15で割って1になるのは明らかにX≡1。
よって、2, 12, 1のデコード結果は8, 3, 1となります。
この数字が何かというのはこの方の謎のお洒落なところで、このまま831で
I LOVE YOU => 8 letters, 3 words, 1 meaning => 8 3 1
という英語のスラングというかよく知られた略メッセージとなります。
ポストの本文に「返事は2を付けて」とあるのは 8312でI love you, too を意味するのですね。
RSAを手計算させようという要求水準と、出てくるのが数字そのもののロマンスなメッセージというセンスが好きです。