hack the box ~魔法使いへの道~ (その9) 【Walkthrough】Weak RSA

未分類

はじめに

前回はHTBのFind The Easy Passを攻略しました。今回は、HTBのBeginner TrackのWeak RSAを攻略する方法を解説します。本記事では、RSAとは何か、RsaCtfToolとは何か、Pythonを使って解析する方法を紹介します。

RSAとは

RSA(Rivest–Shamir–Adleman)は、公開鍵暗号の一種であり、データの暗号化と復号に使用されます。RSA暗号化は、非常に大きな素数の乗算に基づいています。RSAは、暗号化のセキュリティに非常に強力であるため、世界中の金融機関や政府機関などで広く使用されています。

http://hamaruki.xmagix.com/what-is-rsa-beginners-can-understand/

RsaCtfToolとは

RsaCtfToolは、CTF(Capture The Flag)競技において、RSAに関する問題を解決するためのツールです。RsaCtfToolには、RSA暗号化の攻撃に必要な様々なツールが含まれています。これにより、RSA暗号化の問題を解決するための手順を簡単に実行できます。

http://hamaruki.xmagix.com/what-is-rsa-ctf-tool/

https://github.com/RsaCtfTool/RsaCtfTool

Weak RSAとは

RSA暗号は、インターネット上で情報を安全に送受信するために使われている技術の一つです。しかし、この技術には脆弱性があり、その中でもWeak RSAと呼ばれる脆弱性について説明します。

http://hamaruki.xmagix.com/what-is-weak-rsa/

RSA暗号について

RSA暗号とは

RSA暗号とは、暗号化と復号を行うための技術の一つです。この技術では、秘密の鍵と公開の鍵を使って情報を暗号化します。秘密の鍵は、情報を受け取る人だけが持っているもので、公開の鍵は、誰でも知ることができるものです。

RSA暗号の利点

RSA暗号は、情報を安全に送受信するために有用な技術の一つです。RSA暗号を使うことで、情報を安全に送受信できるようになります。また、電子署名をすることもできます。

RSA暗号の欠点

RSA暗号には、以下のような欠点があります。

  • 暗号化と復号の処理が遅いため、高速な通信には向かない
  • RSA暗号が使用する鍵の長さによって、脆弱性が変わる

Weak RSAとは

Weak RSAとは

Weak RSAとは、RSA暗号において、秘密鍵の鍵長が公開鍵の鍵長と同じか、それ以下である場合の脆弱性のことを指します。Weak RSAを利用した攻撃は、パフォーマンスの向上により可能性が高まっています。

Weak RSAの攻撃手法

Weak RSAの攻撃手法は、以下のようになります。

  • Wienerの攻撃
  • Boneh and Durfeeの攻撃
  • Coppersmithの攻撃

RSA暗号の安全性向上のために

RSA暗号を安全に使うためには、以下の点に注意する必要があります。

  • 鍵の長さを適切に設定する
  • 鍵を適切に保管する
  • 鍵の生成に乱数を使う

hack the box ~Weak RSA~の攻略方法

以下は、RSA暗号化の問題を解決するための基本的な手順です。

ステップ1: 暗号化されたテキストの取得

問題のテキストを入手し、暗号化されたメッセージを取得します。

ステップ2: 暗号化されたテキストの解読

RsaCtfToolを使用して、暗号化されたメッセージを解読します。RsaCtfToolを実行するには、Python 3.xが必要です。

以下のコマンドを使用して、RsaCtfToolをインストールします。

git clone https://github.com/Ganapati/RsaCtfTool.git
cd RsaCtfTool
pip install -r requirements.txt

ステップ3: 暗号化されたテキストの解読結果の確認

RsaCtfToolを使用して、暗号化されたメッセージを解読すると、暗号化されたメッセージの解読結果が表示されます。解読結果を確認して、正しい結果が得られたことを確認します。

┌──(maki㉿kali)-[~/Downloads/Weak RSA/RsaCtfTool-master/RsaCtfTool-master]
└─$ python RsaCtfTool.py --publickey key.pub --uncipherfile flag.enc 
private argument is not set, the private key will not be displayed, even if recovered.

[*] Testing key key.pub.
[*] Performing fibonacci_gcd attack on key.pub.
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9999/9999 [00:08<00:00, 1238.77it/s]
[*] Performing mersenne_primes attack on key.pub.
 27%|████████████████████████████████████████████████████▏                                                                                                                                         | 14/51 [00:00<00:00, 258679.54it/s]
[*] Performing nonRSA attack on key.pub.
[!] Timeout.
[*] Performing pastctfprimes attack on key.pub.
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 113/113 [00:00<00:00, 491655.97it/s]
[*] Performing smallq attack on key.pub.
[*] Performing system_primes_gcd attack on key.pub.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7007/7007 [00:00<00:00, 190425.36it/s]
[*] Performing SQUFOF attack on key.pub.
[!] Timeout.
[*] Performing boneh_durfee attack on key.pub.
Can't load boneh_durfee because sage binary is not installed
[*] Performing comfact_cn attack on key.pub.
[*] Performing ecm2 attack on key.pub.
Can't load ecm2 because sage binary is not installed
[*] Performing fermat attack on key.pub.
[!] Timeout.
[*] Performing fermat_numbers_gcd attack on key.pub.
  0%|▌                                                                                                                                                                                            | 32/9999 [00:58<10:04:43,  3.64s/it][!] Timeout.                                                                                                                                                                                                                           
  0%|▌                                                                                                                                                                                             | 32/9999 [01:00<5:11:34,  1.88s/it]
[*] Performing mersenne_pm1_gcd attack on key.pub.
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1023/1023 [00:00<00:00, 13415.83it/s]
[*] Performing noveltyprimes attack on key.pub.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 21/21 [00:00<00:00, 296566.95it/s]
[*] Performing partial_q attack on key.pub.
[*] Performing pisano_period attack on key.pub.
[*] Performing pollard_p_1 attack on key.pub.
 27%|████████████████████████████████████████████████████                                                                                                                                             | 45/167 [00:59<02:43,  1.34s/it][!] Timeout.                                                                                                                                                                                                                           
 27%|████████████████████████████████████████████████████                                                                                                                                             | 45/167 [00:59<02:42,  1.33s/it]
[*] Performing primorial_pm1_gcd attack on key.pub.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10000/10000 [00:02<00:00, 3691.08it/s]
[*] Performing qicheng attack on key.pub.
Can't load qicheng because sage binary is not installed
[*] Performing siqs attack on key.pub.
Can't load siqs because yafu binary is not installed
[*] Performing small_crt_exp attack on key.pub.
Can't load small_crt_exp because sage binary is not installed
[*] Performing wiener attack on key.pub.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 607/607 [00:00<00:00, 2885.62it/s]
 26%|█████████████████████████████████████████████████▍                                                                                                                                            | 158/607 [00:00<00:00, 2538.03it/s]
[*] Attack success with wiener method !

Results for key.pub:

Unciphered data :
HEX : 0x0221cfb29883b06f409a679a58a4e97b446e28b244bbcd0687d178a8ab8722bf86da06a62e042c892d2921b336571e9ff7ac9d89ba90512bac4cfb8d7e4a3901bbccf5dfac01b27bddd35f1ca55344a75943df9a18eadb344cf7cf55fa0baa7005bfe32f41004854427b73316d706c335f5769336e3372735f34747434636b7d
INT (big endian) : 1497194306832430076266314478305730170974165912795150306640063107539292495904192020114449824357438113183764256783752233913408135242464239912689425668318419718061442061010640167802145162377597484106658670422900749326253337728846324798012274989739031662527650589811318528908253458824763561374522387177140349821
INT (little endian) : 88072555727442581906733819159067155697935911281144218615701455765307172880720320635323713584599918143771491506717753835756287620091394177323854379763656327463368952228869334584829987719054100173777641056621175603973323216296201097722843393696547323416050555734978260588354260747823940515336870113457552171266
STR : b'\x02!\xcf\xb2\x98\x83\xb0o@\x9ag\x9aX\xa4\xe9{Dn(\xb2D\xbb\xcd\x06\x87\xd1x\xa8\xab\x87"\xbf\x86\xda\x06\xa6.\x04,\x89-)!\xb36W\x1e\x9f\xf7\xac\x9d\x89\xba\x90Q+\xacL\xfb\x8d~J9\x01\xbb\xcc\xf5\xdf\xac\x01\xb2{\xdd\xd3_\x1c\xa5SD\xa7YC\xdf\x9a\x18\xea\xdb4L\xf7\xcfU\xfa\x0b\xaap\x05\xbf\xe3/A\x00HTB{s1mpl3_Wi3n3rs_4tt4ck}'
HEX : 0x000221cfb29883b06f409a679a58a4e97b446e28b244bbcd0687d178a8ab8722bf86da06a62e042c892d2921b336571e9ff7ac9d89ba90512bac4cfb8d7e4a3901bbccf5dfac01b27bddd35f1ca55344a75943df9a18eadb344cf7cf55fa0baa7005bfe32f41004854427b73316d706c335f5769336e3372735f34747434636b7d
INT (big endian) : 1497194306832430076266314478305730170974165912795150306640063107539292495904192020114449824357438113183764256783752233913408135242464239912689425668318419718061442061010640167802145162377597484106658670422900749326253337728846324798012274989739031662527650589811318528908253458824763561374522387177140349821
INT (little endian) : 22546574266225300968123857704721191858671593287972919965619572675918636257464402082642870677657579044805501825719744981953609630743396909394906721219496019830622451770590549653716476856077849644487076110495020954617170743371827481017047908786316114794508942268154434710618690751442928771926238749045133355844096
STR : b'\x00\x02!\xcf\xb2\x98\x83\xb0o@\x9ag\x9aX\xa4\xe9{Dn(\xb2D\xbb\xcd\x06\x87\xd1x\xa8\xab\x87"\xbf\x86\xda\x06\xa6.\x04,\x89-)!\xb36W\x1e\x9f\xf7\xac\x9d\x89\xba\x90Q+\xacL\xfb\x8d~J9\x01\xbb\xcc\xf5\xdf\xac\x01\xb2{\xdd\xd3_\x1c\xa5SD\xa7YC\xdf\x9a\x18\xea\xdb4L\xf7\xcfU\xfa\x0b\xaap\x05\xbf\xe3/A\x00HTB{s1mpl3********}'

おわりに

これで、RsaCtfToolを使用して、Weak RSAを攻略する方法を学びました。RsaCtfToolは、RSA暗号化の解読に非常に役立つツールです。次回は、別のアプローチで問題を解いていきます。

コメント

タイトルとURLをコピーしました