Type: CryptoPoint: 400
Question: crackme
Summary: RSA 768 bits crack
Answer: how long until 1024 falls by the wayside?
이 문제는 RSA 1월 초에 발표된 깨진 768비트 키를이용하는 공격이다.
이에 대한 Paper는 아래에 올려두었다.
우선 문제의 파일은 아래와 같다.
아래와 같은 방법으로 풀 수 있었다.
n0fate:Desktop n0fate$ mkdir c400
n0fate:Desktop n0fate$ cp defcon18/c400_95bcb7c5807a366d.gz c400
n0fate:Desktop n0fate$ cd c400
n0fate:c400 n0fate$ tar xvzf c400_95bcb7c5807a366d.gz
x blob.dat
x pubkey.pem
n0fate:c400 n0fate$ file *
blob.dat: data
c400_95bcb7c5807a366d.gz: gzip compressed data, was "c400_95bcb7c5807a366d", from Unix, last modified: Sun May 23 12:17:36 2010
pubkey.pem: ASCII text
n0fate:c400 n0fate$ cat pubkey.pem
-----BEGIN RSA PUBLIC KEY-----
MGgCYQDK2YRVfJfgOUMaImrXJ/DG1D7z1BhGnxs3UEmyKYQ+6fg7H5dzisJ09fYf
QB8h8ZE+S2S7MbVaONOYwN/tALE5LwiJcRxEs1nnl2xhf8xzTwbj6VwmR2CRtS9G
LnlBPbUCAwEAAQ==
-----END RSA PUBLIC KEY-----
n0fate:c400 n0fate$ xxd blob.dat
0000000: 8d33 84e4 1159 8ef3 0d52 db86 eaf8 1af0 .3...Y...R......
0000010: 0028 a37d 9e6f 79b0 4ba3 feb6 64df 9441 .(.}.oy.K...d..A
0000020: 9bc0 bf3a af54 babd c3a7 2087 3d0a a428 ...:.T.... .=..(
0000030: bc28 3a5c 3ee7 228e b089 b6b4 7434 133f .(:\>.".....t4.?
0000040: b8f1 c870 889f 8f68 1ca1 c8e0 5de4 ee4f ...p...h....]..O
0000050: f915 6040 1cb3 2c77 619a c210 1ab7 da09 ..`@..,wa.......
n0fate:c400 n0fate$
n0fate:c400 n0fate$ openssl enc -d -base64 -in pubkey.pem -out pubkey.decoded
n0fate:c400 n0fate$ xxd pubkey.decoded
0000000: 3068 0261 00ca d984 557c 97e0 3943 1a22 0h.a....U|..9C."
0000010: 6ad7 27f0 c6d4 3ef3 d418 469f 1b37 5049 j.'...>...F..7PI
0000020: b229 843e e9f8 3b1f 9773 8ac2 74f5 f61f .).>..;..s..t...
0000030: 401f 21f1 913e 4b64 bb31 b55a 38d3 98c0 @.!..>Kd.1.Z8...
0000040: dfed 00b1 392f 0889 711c 44b3 59e7 976c ....9/..q.D.Y..l
0000050: 617f cc73 4f06 e3e9 5c26 4760 91b5 2f46 a..sO...\&G`../F
0000060: 2e79 413d b502 0301 0001 .yA=......
우선 인증서 구조 포맷을 기준으로 modulus 부분을 끄집어 내었다.
00ca d984 557c 97e0 3943 1a22 6ad7 27f0 c6d4 3ef3 d418 469f 1b37 5049
b229 843e e9f8 3b1f 9773 8ac2 74f5 f61f 401f 21f1 913e 4b64 bb31 b55a 38d3 98c0
dfed 00b1 392f 0889 711c 44b3 59e7 976c 617f cc73 4f06 e3e9 5c26 4760 91b5 2f46
2e79 413d b502
이 부분은 코드게이트 2010에 chal7과 타겟만 다를 뿐 실제로는 키가 같기 때문에, 동일한 풀이가 가능하다.
768비트에서 이전 코드게이트의 풀이에 이용된 코드를 컴파일 하여 손쉽게 개인키를 생성할 수 있었다.
Codegate Chal7의 코드가 올라온 페이지: http://blog.stalkr.net/2010/03/codegate-decrypting-https-ssl-rsa-768.html
( thx to StalkR :) )
n0fate:c400 n0fate$ gcc -lssl -o create_private create_private.c
n0fate:c400 n0fate$ ls
blob.dat create_private.c pubkey.pem
create_private e_os.h pubkey.decoded
n0fate:c400 n0fate$ ./create_private
n0fate:c400 n0fate$ ls
blob.dat create_private.c private.pem pubkey.pem
create_private e_os.h pubkey.decoded
n0fate:c400 n0fate$
n0fate:c400 n0fate$ cat private.pem
-----BEGIN RSA PRIVATE KEY-----
MIIBywIBAAJhAMrZhFV8l+A5Qxoiatcn8MbUPvPUGEafGzdQSbIphD7p+Dsfl3OK
wnT19h9AHyHxkT5LZLsxtVo405jA3+0AsTkvCIlxHESzWeeXbGF/zHNPBuPpXCZH
YJG1L0YueUE9tQIDAQABAmB0DeSHYEQoNbqtXhmQRTqdFtt5dtP4u5i/mcDAHL6b
nBK4CMgGg9HjRsFseawWKHTyjKYQwbl+Xh/66VclzgxrAxw+GIsXGHp5OzIsxABM
Vo52ybJYVC6iotbs1GL/9AECMQDuvm3SPOfpnA4iSf7MRBjDSvdOQYv6cUw3kYKE
FKsY8y/X4JMGKkmwMCJcyEX5mrUCMQDZgux7RA4oadJTXlH5G6zD6266BC4Qbm+H
XD0X5T22X//W5OmjYITOYPg9dU3X9wECMQCnEe/8Xc7U9fYWHL4H5+eEUuO5ibkR
K1Pw1w0ErQoGzbe/VFLOz6z9dNG3KBd/0rkCMQCXWi353DJJ1tDe6Bv8TlCah+Gl
mLEBCAedVgbA8OhPVl+tBd65q7jd7sXt5glDxQECMGPaTUJkasmL/oHWpol6MdKQ
dntcO36IGfmwHw6H2TJLFpeozkoCUIj7+MWl4ZXaag==
-----END RSA PRIVATE KEY-----
생성된 키를 통한 복호화
n0fate:c400 n0fate$ openssl rsautl -decrypt -in blob.dat -inkey private.pem -out result.dat
n0fate:c400 n0fate$ cat result.dat
how long until 1024 falls by the wayside?
n0fate:c400 n0fate$
사실 크립토400문제를 잔뜩 기대하고 있었는데,
이미 널리 알려진 문제이고 코드게이트에서 이미 나왔던 문제가 똑같이 나와서 많이 씁쓸했다.
내년에는 주최측에서도 이런 부분에 대해 더 검증이 필요할 것 이라 생각한다.
최근 덧글