A858DE45F56D9BC9 archive

201301010015 15qth4

solved decrypted manual

A UTF-8 'Happy New Year 2013' banner. 3DES-CBC, key MD5('2013'), first block lost.

Metadata

Post ID
15qth4
Title
201301010015 → 2013-01-01 00:15 on A858's clock
Posted (UTC)
2012-12-31 22:15:07
Timezone
UTC+2 · title 00:15 against posted 22:15 UTC
Author
[deleted]
Account
A858DE45F56D9BC9 main account
Subreddit
r/A858DE45F56D9BC9 the main subreddit
Category
S solved 3DES → text
Content
Seasonal greetings and ASCII art
Size
880 hex characters · 440 bytes
Cipher
3DES-EDE2 (two-key Triple DES), CBC, PKCS7
Key
MD5(2013) = 8038da89e49ac5eabb489cfc6cea9fc1 (the year it greets)
IV
never published: the first block is not recovered
New here
Key found: MD5("2013"), the year it greets, in CBC mode. It decrypts to a "Happy New Year 2013" banner. (new results)
Sources
community-archive, arctic-shift · body from community-archive
Links
Reddit · Arctic Shift · JSON
Score · comments
5 · 2
Tags
automated (decryptable)2012Solved special postmanualkey: the year it greetsseasonal greetings and ascii artfound by this project

From the post to its content

As posted (encrypted)

452282ACD3E1F1F1 C9B15D3027EEE4DF F48E526E7C3B2467 D73A7EEFD0AFD4B9 9E8C2B2340AA611C 2241E347B7DFB656 42BFA56D749214D0 D150BB7B470E40B0 655E9CCC09A066FA E51C99D8EA17A103 CA7CD2DDF77E5F3C 8B33F2868EF4EAA5 C0F9B2357184E355 EC8DA1FCD03444B9 7D41586B427FD8AF 913123700D411C0B EA4789BB196A36C3 34CE3D99CED49CCF B413EEBB0DE1601D D3900DB19FD820E9 338C399FA9DE6CF8 4066E83DB80076AA 2C17A7CB48473E7E 549505DD60369559 101B7132663EC7E6 31674FB2B6DFF1E1 D8DCE6BAE874D93A 236EB6047C9DD042 AA7DECD746F254DF 2424E6404D012F38 BD078273D7DBE6A2 9321B55AC65949E4 8278521770DD0366 CE633E4A386C6756 EAC75FD8C80E6404 4C1598727649A544 6954634998C125A9 AFF5B7EBCBFE998C F5D8F271117F3B30 4D3F32A7295A7288 598F8698E120CD9F CA5D3ABBD46ED77F CC3E76567DEDB887 377740DE31E44168 283CFDB184AAA97C 0E776F2AA35C1629 F1EEDE293A7FE8AC AD8605A68DF8B8EF A949255E7D9FEE13 B27EE29AD5B2C912 46A760BD90640AC6 9D23D9BF044DFBD7 1CF797ABC19EF324 1AE6AADF45DF0BED 6279973795436444 
  • Derive the key. Password = 2013 (the year it greets); key = MD5(password) = 8038da89e49ac5eabb489cfc6cea9fc1, used as a two-key 3DES key.
  • Decrypt. 3DES-EDE2 in CBC mode, then strip the PKCS7 padding.
  • Lost block. The IV was never published, so the first 8 bytes are not recovered (shown as ????????). Every later block decrypts exactly.

Decrypted

????????�        ╔═╗     ╔╦╗      ╔═╦═╦═╦═╗
║╩╠═╦═╦═╦╦╗║║╠═╦╦╦╗║║╠═╦═╦╦╗╠═║║╠╗║═╣
║╦║╬║╬║╬║║║║║║╩╣║║║╠╗║╩╣╬║╔╝║═╣║║║║═╣
╚╩╩╩╣╔╣╔╬╗║╚╩╩═╩══╝╚═╩═╩╩╩╝ ╚═╩═╝╚╩═╝
    ╚╝╚╝╚═╝

Explanation

Write-up

I have found a solution for 15qth4 (title 201301010015), originally found here. It was posted on 2012-12-31 22:15:07 UTC, which is 00:15 on New Year's Day in UTC+2, the time in its title. It is the post A858 made in the middle of its New Year run (the filler that night restarts with titles counting to midnight in other time zones), and as far as I know it has never been decrypted.

It is 440 bytes, grouped as 55 blocks of 8 bytes, which does not follow the usual 32N+8 length of the filler posts:

452282acd3e1f1f1 c9b15d3027eee4df f48e526e7c3b2467 d73a7eefd0afd4b9
9e8c2b2340aa611c 2241e347b7dfb656 42bfa56d749214d0 d150bb7b470e40b0
655e9ccc09a066fa e51c99d8ea17a103 ca7cd2ddf77e5f3c 8b33f2868ef4eaa5
c0f9b2357184e355 ec8da1fcd03444b9 7d41586b427fd8af 913123700d411c0b
ea4789bb196a36c3 34ce3d99ced49ccf b413eebb0de1601d d3900db19fd820e9
338c399fa9de6cf8 4066e83db80076aa 2c17a7cb48473e7e 549505dd60369559
101b7132663ec7e6 31674fb2b6dff1e1 d8dce6bae874d93a 236eb6047c9dd042
aa7decd746f254df 2424e6404d012f38 bd078273d7dbe6a2 9321b55ac65949e4
8278521770dd0366 ce633e4a386c6756 eac75fd8c80e6404 4c1598727649a544
6954634998c125a9 aff5b7ebcbfe998c f5d8f271117f3b30 4d3f32a7295a7288
598f8698e120cd9f ca5d3abbd46ed77f cc3e76567dedb887 377740de31e44168
283cfdb184aaa97c 0e776f2aa35c1629 f1eede293a7fe8ac ad8605a68df8b8ef
a949255e7d9fee13 b27ee29ad5b2c912 46a760bd90640ac6 9d23d9bf044dfbd7
1cf797abc19ef324 1ae6aadf45df0bed 6279973795436444

It decrypts with des-ede-cbc (2-key 3DES in CBC mode), using the key MD5("2013") = 8038da89e49ac5eabb489cfc6cea9fc1. Not the usual MD5(A858DE45F56D9BC9), but the year it was welcoming, the same kind of occasion key as cakeday for the birthday cake in 1we0v9. The plaintext is not plain ASCII but UTF-8 box-drawing characters (each one is 3 bytes, E2 95 xx), 5 lines separated by CRLF, with a 1-byte PKCS#7 pad. The IV was never published, so the first 8-byte block is lost, like the other CBC posts from this period (15cd8y, 1iwqql, 1mjpwt, 28o545, 3j99nf, 1we0v9). The rest decrypts cleanly to a banner:

╔═╗        ╔═╗     ╔╦╗      ╔═╦═╦═╦═╗
║╩╠═╦═╦═╦╦╗║║╠═╦╦╦╗║║╠═╦═╦╦╗╠═║║╠╗║═╣
║╦║╬║╬║╬║║║║║║╩╣║║║╠╗║╩╣╬║╔╝║═╣║║║║═╣
╚╩╩╩╣╔╣╔╬╗║╚╩╩═╩══╝╚═╩═╩╩╩╝ ╚═╩═╝╚╩═╝
    ╚╝╚╝╚═╝

I read it as "Happy New Year 2013": the three descenders on the last line sit under the p, p and y of "Happy", then come "New" and "Year", and the narrow four-cell block at the end is the year. (That is my reading of the art; I could not find the exact FIGlet font it was made with, so if someone recognises it, please say.) It fits A858's other holiday posts: the fireworks "Happy New Year 2001" in nt82j (Dec 2011), "Merry Christmas" in 15cd8y a week earlier, and the birthday cake in 1we0v9.

About the missing first block: the first recovered byte is 97, the last byte of a ╗ (E2 95 97), so the lost 8 bytes end in the first two bytes of that character. The most natural top-left corner is ╔═╗ (the same shape as the other letter tops on that line), which makes the lost block e29594 e29590 e295. In CBC mode the first plaintext block is D(C0) XOR IV; here D(C0) = 6fab841f6c504abf, which gives IV = 8d3e10fdf9c0a82a. (Again an assumption, but the banner does not depend on it.) Like the other CBC posts, the IV looks like a fresh random value per post.

Why nobody found this before: 2013 is an obvious guess for a New Year post, and I had actually tried it earlier, but my check was looking for printable ASCII text in the first few blocks. The box-drawing characters are multi-byte UTF-8 (every byte is 0x80 or higher), so the right key was thrown away, and the 1-byte pad also slips past checks that look for a full padding block. What finally caught it was a plain uniformity test: decrypt the whole post and measure how evenly the byte values are spread. Random data scores around 0, and this post scored 955 under MD5("2013").

Steps as one command (put the hex above in 15qth4.hex; with the zero IV used here the first 8 bytes of output are garbage, tail -c +9 drops them; use -iv 8d3e10fdf9c0a82a and no tail to get the first row with the assumed ╔═╗):

xxd -r -p 15qth4.hex | openssl enc -d -des-ede-cbc -K "$(printf '2013' | md5sum | cut -d ' ' -f 1)" -iv 0000000000000000 | tail -c +9

(The plaintext is 439 bytes: 8 lost + 431 recovered, plus 1 byte of PKCS#7 padding, which openssl strips itself. Your terminal needs to show UTF-8 for the art to come out right.)

Solution summary

Method
3DES-CBC, key MD5('2013'), 1-byte pad, IV not recovered
Result
UTF-8 box-drawing 'Happy New Year 2013' banner
Explanation
Solved: UTF-8 box-drawing banner; found by the full-body uniformity oracle (had the key but rejected UTF-8); verifier checks the row count and SHA-256 of the decoded bytes
Re-checked
3DES-CBC MD5("2013"), IV lost: UTF-8 banner