[HECnet] I have found how to recover the TOPS-10 Fortran V11 patch decryption keys
Supratim Sanyal
supratim at riseup.net
Wed Apr 15 09:56:03 PDT 2020
Fascinating reading - almost like reading Stoll's Cuckoos Eggs!
Thank you G.
---
Supratim Sanyal, W1XMT
39.19151 N, 77.23432 W
QCOCAL::SANYAL via HECnet
> On Apr 15, 2020, at 12:09 PM, Robert Armstrong <bob at jfcl.com> wrote:
>
> Thanks, Gerry!
>
> Bob
>
>
> -----Original Message-----
> From: owner-hecnet at Update.UU.SE [mailto:owner-hecnet at Update.UU.SE] On Behalf
> Of G.
> Sent: Tuesday, April 14, 2020 11:07 PM
> To: HECnet
> Subject: [HECnet] I have found how to recover the TOPS-10 Fortran V11 patch
> decryption keys
>
> Since here too there are some TOPS-10 users, I am pleased to announce that I
> have found a way to recover the long-missing TOPS-10 Fortran V11 patch
> decryption keys. Find below a copy of the post I just sent to alt.sys.pdp10.
>
> HTH, :)
> G.
>
> =====
>
> Dear all,
>
> as many of you may know, the TOPS-10 Fortran V11 tape image
> available in the usual repositories is truncated because the original tape
> reel from which it was sourced (BB-D480G-SB) was found to be damaged.
>
> Luckily enough, the first four savesets (out of seven) were indeed readable,
> therefore the V11 compiler is in fact available. Unfortunately, one of the
> missing savesets (the seventh) contains the keys required to decode TSU tape
> patches. Therefore, even if TSU tapes are available and completely readable,
> their contents could not be used because they are encrypted.
>
> Nonetheless, after much pondering and careful observing, and thanks to some
> good guess, I was able to reconstruct the most important missing keys :)
>
> Since both TOPS-10 and TOPS-20 Fortran compilers share the vast majority of
> their sources, my first idea was to build the updated TOPS-10 Fortran
> compiler from scratch with TOPS-20 sources from the latest TSU tape, but I
> soon found it to be a too complex task because, among other things, some
> TOPS-10-specific sources were missing. I would have had to use those from
> some old field test tape available in the repository, but I was afraid that
> the resulting compiler (if buildable at all) could have been a weird
> bug-ridden hybrid. So I had to find a different route. Since I was there, I
> also verified that TOPS-20 keys (which have always been available) do not
> work with TOPS-10 products.
>
> By observing the keys for other products I noticed that they are wildly
> different in size and are usually pretty large, some are several hundred
> blocks long, therefore I speculated that the encryption may have been just
> some simple XOR of keys and sources. This means that XORing any cleartext
> file with its corresponding encrypted version yields the key.
>
> Since I could not directly recover the key for the patched compiler binaries
> because I didn't have a suitable cleartext copy of any encrypted binary, I
> had to follow a more circuitous route.
>
> The solution comes from the fact that, as I said above, TOPS-10 and TOPS-20
> Fortran compilers share the vast majority of their source files, which also
> happen to be among the largest of the whole Fortran distribution. Also, most
> important, the updated runtime sources come with their respective compiled
> counterparts, i.e. REL files. Finally, runtime binary modules are contained
> in the runtime sources saveset, whereas the resulting library is contained
> in the binaries saveset.
>
> So, here is a summary of the required steps.
>
> 1. First of all, on TOPS-20, restore the TOPS-20 Fortran V11 runtime key,
> namely FORLIB.KEY, from the product distribution tape BB-4157J-BM.
>
> 2. Then, still on TOPS-20, restore the largest updated source of the Fortran
> V11 runtime and the decryption tool, namely FOROPN.MAC and DCRYPT.EXE, from
> TSU tape 04 (volume 1 of 2) BB-PENEA-BM.
>
> 3. Then, again on TOPS-20, use DCRYPT to obtain a plaintext version of
> FOROPN.MAC, and call it e.g. FOROPN.T20.
>
> 4. Finally, transfer FOROPN.T20 to TOPS-10. If you do not have a working
> DECnet network available you could use a tape image. The standard TOPS-20
> backup program, DUMPER.EXE, could write (and read) TOPS-10 BACKUP tapes when
> instructed to do so with the INTERCHANGE command. Note that the same
> INTERCHANGE command in TOPS-10 BACKUP.EXE has another (unrelated) meaning.
>
> 5. Now on TOPS-10, restore the original (unpatched) TOPS-10 Fortran V11
> runtime files from the truncated tape BB-D480G-SB. In fact they are in the
> fourth saveset, i.e. the last readable one. Then, in the same directory,
> restore the updated Fortran runtime files from TSU tape 04 (volume 3 of 3)
> BB-PBDED-BB. The directory on tape is DSKB:[10,7,FTNOTS]. Several old files
> will be overwritten with new patched and encrypted updated copies.
>
> 6. Restore tools APUTIL.EXE and DCRYPT.EXE from TSU tape 04 (volume 1 of 3)
> BB-BT99V-BB. APUTIL and DCRYPT do basically the same thing, but APUTIL is
> list-driven and could verify checksums, whereas DCRYPT does just one file at
> a time and does not perform any check.
>
> 7. Then restore (or make available) the FOROPN.T20 file created on TOPS-20
> and "misuse" DCRYPT to obtain the runtime key. Since the encryption is a
> simple XOR and DCRYPT luckily does not distinguish among encrypted, plain,
> and key files, just feed it with FOROPN.MAC (which is encrypted as it came
> from the TOPS-10 TSU tape) when it asks for some encrypted file, and
> FOROPN.T20 when it asks for a key. Call the resulting file FTNOTS.KEY.
>
> |.r [,,tsu]dcrypt
> |
> | [DCRYPT version 1(3)]
> | Dcrypt>decrypt foropn.mac foropn.t20 ftnots.key
> | Decrypting DSK:FOROPN.MAC
> | with DSK:FOROPN.T20
> | calling it DSK:FTNOTS.KEY ...[OK]
> |
> | Dcrypt>
>
> 8. Now, with our new key, we can use APUTIL to decrypt every runtime file.
> APUTIL reads file names from a VFY file and is able to distinguish between
> encrypted and non-encrypted files. Therefore in decrypt mode it will only
> work on encrypted files, whereas in verify mode it will work on all files.
> If the VFY file and the KEY file have the same name, it's all automatic.
>
> | .r [,,tsu]aputil
> |
> | APUTIL>read ftnots.vfy
> | [Reading DSKB:FTNOTS.VFY[1,2,FTNOTS]]
> | APUTIL>decrypt
> | [Decrypting DSKB:[1,2,FTNOTS] using key file DSKB:FTNOTS.KEY[1,2,FTNOTS]]
> | B10FRS.CTL has been decrypted
> | FDDT.MAC has been decrypted
> | FORCHR.MAC has been decrypted
> | . . .
> | MTHDUM.REL has been decrypted
> | MTHPRM.UNV has been decrypted
> | FORDDT.REL has been decrypted
> | [Decrypted 25 of 94 files, 0 errors, 0 checksum errors]
> | APUTIL>verify
> | [Verifying DSKB:[1,2,FTNOTS]]
> | B10FDT.CTL has been verified
> | B10FRS.CTL has been verified
> | F10LIB.CCL has been verified
> | . . .
> | MTHTRP.MAC has been verified
> | MTHTRP.REL has been verified
> | FORDDT.REL has been verified
> | [Successfully verified 94 of 94 files, 0 errors, 0 checksum errors]
> | APUTIL>
>
> 9. At this point we are ready to create our updated runtime library. Run
> MAKLIB and feed it with F10LIB.CCL. This will create a new and updated
> FORLIB.REL in the current directory, which will be the picklock to recover
> the compiler binaries key. Let's rename it to something like FORLIB.NEW.
>
> | .r maklib
> |
> | *@f10lib.ccl
> |
> | *^Z
> |
> | .rename forlib.new=forlib.rel
> | Files renamed:
> | DSKB:FORLIB.REL
>
> 10. Now, in another directory, restore the updated and encrypted compiler
> binary files from TSU tape 04 (volume 3 of 3) BB-PBDED-BB. The directory on
> tape is DSKB:[10,7,FTNSYS]. Copy to the same directory FORLIB.NEW from the
> previous step and feed it to DCRYPT.EXE together with FORLIB.REL (encrypted,
> coming from the TSU tape) to obtain FTNSYS.KEY in the same way as above.
>
> 11. Now run APUTIL to decrypt and verify the binary compiler files, that is
> our final target.
>
> | APUTIL>read ftnsys.vfy
> | [Reading DSKB:FTNSYS.VFY[1,2,FTNSYS]]
> | APUTIL>decrypt
> | [Decrypting DSKB:[1,2,FTNSYS] using key file DSKB:FTNSYS.KEY[1,2,FTNSYS]]
> | FORDDT.REL has been decrypted
> | FORLIB.REL has been decrypted
> | FORO11.EXE has been decrypted
> | FORTB.EXE has been decrypted
> | FORTC.EXE has been decrypted
> | FORTD.EXE has been decrypted
> | FORTE.EXE has been decrypted
> | FORTF.EXE has been decrypted
> | FORTG.EXE has been decrypted
> | FORTRA.EXE has been decrypted
> | [Decrypted 10 of 10 files, 0 errors, 0 checksum errors]
> | APUTIL>verify
> | [Verifying DSKB:[1,2,FTNSYS]]
> | FORDDT.REL has been verified
> | FORLIB.REL has been verified
> | FORO11.EXE has been verified
> | FORTB.EXE has been verified
> | FORTC.EXE has been verified
> | FORTD.EXE has been verified
> | FORTE.EXE has been verified
> | FORTF.EXE has been verified
> | FORTG.EXE has been verified
> | FORTRA.EXE has been verified
> | [Successfully verified 10 of 10 files, 0 errors, 0 checksum errors]
> | APUTIL>
>
> :)
>
> The same trick, but with REVHST.MAC instead of FOROPN.MAC, could be used to
> recover the compiler sources key, although it will not decrypt a couple of
> files because they are longer than REVHST.MAC and some other unpatched files
> will not pass the checksum verification because the originals are missing
> (they were stored in the unreadable section of the product distribution
> tape) and those from the field test tape I had to use are different. At the
> moment I have no fresh data at hand, but if my notes are correct it worked
> for 253 out of 258 files, i.e. only 5 files didn't pass the checksum test,
> and of those only 2 are actual source files.
>
> I hope you'll find all of this useful and amusing as much as I did, :)
> G.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sonic.net/pipermail/hecnet-list/attachments/20200415/a3d2d883/attachment-0001.html>
More information about the Hecnet-list
mailing list