Home Page Hebern's machines Home Page Hebern 1 rotor Home Page Cryptanalysis, Home Page
|
IntroductionFrom a cryptogram whose plain text is known, it is always possible to create the encryption table which then allows any message to be deciphered. The only small problem is that it is more or less simple to reconstruct the permutations used by the Hebern 1 rotor machine which made it possible to generate the cryptogram. Only the rotor is unknownReconstruction of the encryption tableCreate the cryptogram: C:\H1_TOOLS> type MSGS\p100.pln THEREARENOBORNDECISIONMAKERSWHETHERWELIKEITORNOTMAKINGACHOIC EISAPARTOFBEINGHUMANANDWEDONOTTHINKTOOHIGHLYOFTHOSEWHOTHROWA WAYTTASRIGHTESTHERBYHAVINGSOMEONEELSEMAKEUPTHEIRMINDSFORTHEM ORBYTAKINGSOMUCHTIMEMAKINGADECISIONTHATISISTOOLATETOACTNOTTO DECIDEISADECISIONNOTTODECIDEHEREARETWOMETHODSOFAPPROACHINGTH EDECISIONMAKINGPROCESSTHEFIRSTISTHATTHEMOSTSUCCESSFULDECISIO NMAKERSFOLLOWASETOFRULESTHATHELPTHEMSELECTTHEBESTALTERNATIVE UNDERTHECIRCUMSTANCESTHESEBASICRULESOFDECISIONMAKINGINVOLVES SIXSTEPSFIRSTSTATETHEAPPARENTPROBLEMORSITUATIONYOUFACESECOND GATHERTHEFACTSTHIRDORGANIZEANDINTERPRETTHESEFACTSFOURTHSTATE THERNBSPROBLEMORSITUATIONINWRITINGFIFTHDEVELOPALTERNATIVESOL UTIONSANDSIXTHSELECTTHEMOSTAPPROPRIATEALTERNATIVETHESECONDME THODOFAPPROACHINGTHEDECISIONMAKINGPROCESSISQUITETHEOPPOSITEH EREARESIXTEENWAYSTODODGEDECISIONSONETAKEFLIGHTINTODETAILSTWO COUNSELINFINITEDELAYOFACTIONTHREEDELEGATETHEPROBLEMTOACOMMIT TEEFOURLOOKFORTHEANSWERINTHEBOOKFIVEINDUCETHEBOSSTOCOMMITHIM SELFONHOWTOHANDLETHEPROBLEMSIXGIVEANANSWERINDOUBLETALKSEVEND ELEGATETHEPROBLEMTOASUBORDINATEEIGHTINDICATETHATALLPROBLEMSM USTBECONSIDEREDINSERIALORDERNINEHAVEASTUDYMADETOGETALLTHEFAC TSTENARRANGETOBECALLEDOUTOFTOWNELEVENCALLINANEXPERTTOMAKESUR EWEREONSOLIDGROUNDTWELVEDENYTHATANYPROBLEMEXISTSTHIRTEENTAKE FLIGHTINTOILLNESSFOURTEENTAKEFLIGHTINTOTHEBOTTLEFIFTEENSTATE THEPROBLEMBELONGSINSOMEONEELSESPROVINCESIXTEENSIMPLYPUTONONE SHATANDGOHOME C:\H1_TOOLS> python hebern1_tui.py -R c5 < MSGS\p100.pln > MSGS\p100_1.cry C:\H1_TOOLS> python groupe.py < MSGS\p100_1.cry RBLHY VFBMC YBUSN CNVWX IHGOE HBQCL YZTBE RFHYY PWTJR UIUGO EXZVR XEMJC NSJXE MMNHB ZSZHX AFJFO RVSLI HKJUM OXEEP XVDWL XALMP MSLZG IZZCW SUDAS FKGCF ZTSPB WJLRH QIXBN RXKHC FMJFS IHJTL CXYRW YHOYZ QTISH COMBV VFYJM XZQLS DLULS XCIPD XIWDD FYDLN JGUXF MRRML YZAWG LHZNH JOYFR LLGRR OWPHM DBGSP WYNBO UANPZ ONRXE RGYTJ UDBZQ GWJKP NFJFS FYSIA AAPZA QMHCZ SBQOX POUAN PZONM GKCOA AQMWB XHWSM QEYMX NPFYW BDOXY WRHGZ CGQJV PJYOU ANPZO NMGKX CIZZT VNPAJ WODDY YCAPF YWBCH IXSLY WYBJQ LMOXP JUSQY GUJSK NRIJT AYDBE KRWDH MMYPW CQHIT AEWZI TWVYA GWNHM NFVBD SXBLS RQNOI FGRYK NJOFV LHUHT DEPSL DKDCR PSTHQ IPDVE IMSII GJZEK BSSAX RTRPR MLTKX XXDOZ CNJIZ LZLAV ZRBLZ TRGFI PTIVD MFIGN KKZNI PWRZP AQEGY ZQJWP MKNMB VGOUK KDNRZ SLYNL VXVGB NRPBH LWXFM WBPAZ IFJQU GAMYX GPAGO UEAEI TWFDH BORPR AIFKB NMYDC HIGCP ZILAA HIZVP HQIKK HWXEG MRKLN YFRWF DHBOR PRAIY ZQJWD DCODD QMIJS WGQHC WDJQJ DHKRW VOKWM VVUTZ RDKBH CWXYG YAXDN GOOID UJEJI EBBVO XCLDQ EYASK FWAWB KMXVZ IJXTS HTIIF ZYYNM QWXGO DQOUU CZHLL SHRPM MOZNN GCNTL OYWQB NUZUJ IVPFL WZTRG AKJWS UOPOU CATQU JBCHH CWUDE XYKAL BSZEN TDALI MDFXA OMWHH QIPMH DWUHC NVDZD IFUDT HCOYI JEGIN FUVLA FMHPF XFYBM AHIMW VEMNY KPETV RPNVD EVIXA TQCCD AFIEH DUJJL MKEEB JDRGR LOLKD ZJTXX IWNYE MMAGC KLVRG RGBXN DTEYQ XJDUK FWYEG NOGCX YZLTD OFJRM DFFNB BFALZ OHTMA BIHTD SHBZY FXGIX QAKBU LPYQV ISWZF TGCRT YNUVD BICOW OMYQT NALQQ LKDHZ PPHTY PBICY WDMYQ UTVGF OUBXV ZZXTI ELCUB KGAMC CJWAV FUSMG KXQQH YLIXN CBVTR EOCLV GCJLU VPUZY TXBGI UKETC GMRLC AHKIB KDCRB MHHEI DIAAW PREFV XNUFO BFLWX QIZZH FYNQB MJYPV AVMMF LNBXE WZEYH ZVBRS XMMOC HTKQS FYJYJ AQULE WEVNM YJGAN FBUJI SKSTT AQBGJ FXRIF QEWWM SZWDW OIPML LKAZZ ILTZH DAYUS TZP Create the encryption table: C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100_1.cry MSGS\p100.pln 1 - Print cryptogram and plain text 2 - Choose the key (Z by default) 3 - Create generatrix 4 - Print generatrix 5 - Change mode (cipher or decipher [by default]) 6 - Print ordered array 7 - Permute two columns of the ordered array 8 - Permute all columns of the ordered array 9 - Search columns fit 99- Quit Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: Z Coord of Crypto : Abscissa: Plain , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- F Q T X A W C O I Z P H B D R U B- P F Z M V B I U Y O G X C Q J T D L C- R E V Y L A M X F W Z P I S Q J C D- D U X T Z G L F W M E V Y A H R P I J N E- T W J S Y E R L D U X Z Q O H A I F- V R X E Q U T W Y M F N G Z H A L B G- H W D I P T J V X L O F Y G Z K N H- P V C H B S I A W K D N X F Y Z T I- U B G A N R H Z Q J M K D E X I P S J- A F Q Y P S B J C V D W H K X O R E N K- E Y L P F X O R T A K I B U G J W N D L- X W Q S G H A T B I V M P L M- J N D V M P Y G S A T E U L O K C N- M L O Q E X H Y R Z S D G K N A J W O- B K N P D G E Y C F M Z I O A U P- S J M O C V F D W Q B E R I Y H N K Q- I L N B U C V O P A D Q H K G M T Y F J R- K M A T D B U N V C P G J W L S X E S- Z S C A M U N O F I V E R W Q D G T- Y R B Z S L T M X E H U D J V P C G I K U- Q Y K S L W Z D G T C I P O B F V- Z X Q J R Y L F S B H O T E U M I W- W I J U X K B R A G N S D T L F X- O I T W J A D F M R L Y S K B U Y- G S V C P E L Q K X J A D F T Z- N R U H B O X K P J W A Q Z C E V M The diagonals correspond to the identity permutation, they are all equal to ABC...Z. As a result, it is simple to reconstruct the entire table: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A F Q T G X A N W C J O I V Z P H Y B D R K U S L E M B P S F W Z M V B I N H U Y O G X A C Q J T R K D L E C R E V Y L U A H M G T X N F W Z B P I S Q J C K D O D D U X K T Z G L F S W M E V Y A O H R P I B J C N Q E T W J S Y F K E R V L D U X Z N G Q O H A I B M P C F V I R X E J D Q U K C T W Y M F P N G Z H A L O B S G H Q W D I C P T J B S V X L E O M F Y G Z K N A R U H P V C H B O S I A R U W K D N L E X F Y J M Z Q T G I U B G A N R H Z Q T V J C M K D W E X I L Y P S F O J A F Z M Q G Y P S U I B L J C V D W H K X O R E N T K E Y L P F X O R T H A K I B U C V G J W N Q D M S Z L X K O E W N Q S G Z J H A T B U F I V M P C L R Y D M J N D V M P R F Y I G Z S A T E H U L O B K Q X C W N M C U L O Q E X H F Y R Z S D G T K N A J P W B V I O B T K N P D W G E X Q Y R C F S J M Z I O V A U H L P S J M O C V F D W P X Q B E R I L Y H N U Z T G K A Q I L N B U E C V O W P A D Q H K X G M T Y S F J Z R R K M A T D B U N V O Z C P G J W F L S X R E I Y Q H S L Z S C A T M U N Y B O F I V E K R W Q D H X P G J T Y R B Z S L T M X A N E H U D J Q V P C G W O F I K U Q A Y R K S L W Z M D G T C I P U O B F V N E H J X V Z X Q J R K V Y L C F S B H O T N A E U M D G I W P W W P I Q J U X K B E R A G N S M Z D T L C F H V O Y X O H P I T W J A D Q Z F M R L Y C S K B E G U N X V Y G O H S V I Z C P Y E L Q K X B R J A D F T M W U N Z N G R U H Y B O X D K P J W A Q I Z C E S L V T M F The rotor wiring corresponds to the first line (FQT...). Reverse rotor rebuildIt is possible to create the opposite table: on the abscissa the encrypted letter and on the ordinate the key. We obtain in the first line the wiring of the rotor... reverse! C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100.pln MSGS\p100_1.cry 1 - Print cryptogram and plain text 2 - Choose the key (Z by default) 3 - Create generatrix 4 - Print generatrix 5 - Change mode (cipher or decipher [by default]) 6 - Print ordered array 7 - Permute two columns of the ordered array 8 - Permute all columns of the ordered array 9 - Search columns fit 99- Quit Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: Z Coord of Crypto : Abscissa: Plain , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- F R I S A P L K O B T C V H E N B- H R X C O I T Y F N A S U L G P M E C- G W B N S V E I R U A T C O L D P D- P A M I G R U W H L Y T S E B N K C O F E- U L H T V C K S R I D A M B N E O F- V Y E P S U W O R H C L I A M D N T G- D R T A E I V N W P G H L C M S U H- I E C N S D H M O A G Y B L R T W I- D B P R C G T L O N E W I F X A S H J- A L O Q X B S N T Y V H E W I P R U G K- K N W A E R M S L C U G D H I O T F B L- M O I L R W T U G H N S E A M- N Y C P K A V S E B T F M O R D I N- T O G P I U R D A S E F L N W H K M O- W A N F I O H T C R D U E X L S P- M E H N G S P B Y C T D L O A F I R Q- L D G M W R O A X P B S C I K N T E H U R- C F L E V N O A R B H M S D G I P T S- E D U P M Y N G I L T R C H O S B T- C T O L U M Y P Z F H S B E G N R I A D U- S N K T L O E G R P A F M H C I V- M S K N X D I U O C E L P T B H A W- L I R V M C E H T N K O S F A G X- H T I L D G S O M A N R E W F P Y- S H T K U A R N L I M D V E O Z- O G S T E M K Y A H L P C D W N I R Choice ? Note: Menu choice 5 allows you to move from the encryption table to the decryption table. This avoids restarting the program. An example is given in the following paragraphs. Rotor and keyboard permutations are unknownThe key is ZFirst, we create the cryptogram: C:\H1_TOOLS> python hebern1_tui.py -R c5 -K LFS < MSGS\p100.pln > MSGS\p100_2.cry C:\H1_TOOLS> python groupe.py < MSGS\p100_2.cry AUIKO ODFQC EBVHG HPQZI ILGNZ CGSJM OJVFA OJUCE ZKEJC XIKGN ZMCNK WDMRU XNYRB BNVHH LPJLE FDJLI KFEAY IKSUN PRHWC BVDGW EFBIP EUMZI YMJCX HVDVG SYKLS IPIUD IMIUF TYHUD KRAVE PLJFP ILTKB GDYKG OZZOJ HSESV EDLHV ZSSTM XUFAU CKBJR BCIMG RDKDS FFLWB QWODH DUPMJ OJEXY NVTVH JEFSE ULWKA IWZFM TFVNR VCCUD MZGRJ OBDXY AGHRL BTFJH PVXLZ VSJFP SSSAO AMDQI SMAUJ NTZPR ZDMZG RJOBM WBEIG ISMSF BFXHL IHOLB GRSSV WIPDY WUFIG UVHYK WASDM ZGRJO BMWBD WEQZF ONYEY VPDLO TWWRS SVWLC HTUMO WQFDH ANPRZ SMMTF PKTIP TALFR HUTFA GKVGV NXTPZ LHLRK OYIQE RTOQT VMWUL CFAVS BIAWS DQTNL MSPUL NDJJK NVKJE SDRXW QHIGA DURFT YQLXM ELHDU BJLJB BSIOM AJKZP MJEKK ZRGNT HPJNM MIUFA UAUIQ MCCVR BSEFD NPJVG SBIBA UXAQY ISGCO JHYVW BQVLH VCRKA HITAQ UMOXJ PBXPB JGZBH TZISU VWUAC LMBSB CTQUZ YWQYD MGWJI MVYIC GIKZP YYVKV WNCDE JJVUR JQUFO CHQTZ FTYKK FXRBJ NRYTG FSEVY ICGIK ZPYYO JHYVG DEDDS TEIYS VWSKW WCLTR ATGKV FNQKL QVXTI XXPDK WWWOI QTBWW YPNDQ MJDGI XOWAP DWICS GQTGG JVYPU LLBVM IYEKC COLEN ZUQNQ HXRRN LIZOO LJLUL CCADD AWJKN VCWGN NSKOH GXJKT AAQLA WQMCC TKSXH VNZDM WWAHK TWLCK WWDNG XOKEA BSZHV ESWKI UQYXA NEWKF TYQQF QVVVE VASLD IVYXK CEIHP LGCWX AUKNQ FXHPF ISSOM OCHEW FDMKO KBMGF GZVAS DZIZM KQGEF GNXGA ASSYC LLHWV JQYPE UNBBQ QFRRQ YLXUM NLQYH YTVYP EGWXT QJRYS QRASG JVCFY VZVUI DIUKI PLMKA NHDNU VJANZ IJEKW NILPX CCGQH NRIYH FECBV XZOOQ NPGIN KWGAJ HOUOT FRCHV PBSIE CWKHF UHICC DYKMU BFRCE VGBSI MNVCS OYWXL CQZRX GJUSV CYYBE HNRWZ SKSMW BDSSK OAYHX CTKTG HDWTV CZYUG AQZQH RRPCW SGMGH JNRIW WHBQO HIGAU DKFGY AREOV WGHPA BGXSO OYBXD SEQZZ DOXHT NXEZA KQYES WBWXY IQRYF JOFON ZNLNE JEYTP SSTES AFXIE TGONQ UYYYC FBMJN PBTPK OSGGF NRCYV FZXVL HTKDR EQVUU LPACQ EMMJA AZUUH TZZ We create the encryption table: C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100_2.cry MSGS\p100.pln 1 - Print cryptogram and plain text 2 - Choose the key (Z by default) 3 - Create generatrix 4 - Print generatrix 5 - Change mode (cipher or decipher [by default]) 6 - Print ordered array 7 - Permute two columns of the ordered array 8 - Permute all columns of the ordered array 9 - Search columns fit 99- Quit Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: Z Coord of Crypto : Abscissa: Plain , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- L F O D M I E N H C P K G Q A Z B- D H Q E N U L X Y I G T W S M J F A C- K R T H I G D Z M W Q Y E U S F J D- C D W R Q S M N G A E F Y I K U Z P B O E- M T L E O D P K N U R Z S W F H X F- O C Q G T B F W U M H X I J Z Y A P G- A S T Y B V R O X J Z D Q C G L K H- Q P U I F R W T L K A N H V O M E I- S U V Z X O T J F D Q K L A B R Y G J- E A H U B N V S C X W M F G K J O Z D K- M E A R J Z H K S O C I T U P Y X W Q L- R V Z H Y U A G B E K N M C M- X J G F L W C R S Y T B V N P A H N- B X N I F R V E G Z H D J L C Q A P O- U Q G Z L Y H S E F N T D I V K P- G S X D H A P Q K I B W R U O J V L Q- J I P V M W A Z C K D O H Y B L E T S N R- Y K Z N S H O C Q W P V J R T M B G S- L B U W Y O G E F N V D C Z T Q K T- F Y N M P K A E I J H X D G Z R L C Q S U- H D B X M G J L P T Z I V R A S V- I Z F Y E S W V T B L O M X K U Q W- V R T Y E A O X M G B S Q P U N X- N A K V Q F X Y M D L E I H W G Y- W C A L U Z B Q P X S O I D K Z- T K O C D P M B Q J X A S U G Y L I Choice ? Here, the diagonals doesn't correspond to the alphabet. Due to the Keyboard permutation, the columns are mixed. They can be rearranged to complete the table. The program allows you to find adjacent columns. The best candidates correspond to the couples with the highest number of diagonals. Choice ? 9 Note: don't use the ordered table A-C (20), A-F (13), A-I (25), A-X (6), B-D (10), B-F (7), B-H (14), B-K (4), B-M (11), B-O (14), B-P (12), B-S (15), B-T (15), B-U (9), B-V (4), B-W (10), B-X (5), B-Y (7), C-F (9), C-H (20), C-K (9), C-U (15), C-W (11), C-X (5), C-Y (9), D-F (10), D-G (14), D-K (8), D-N (19), D-O (18), D-P (13), D-U (12), D-V (8), D-W (10), D-Y (8), E-K (12), E-P (19), E-U (16), F-G (10), F-K (7), F-L (13), F-M (10), F-S (14), F-U (9), F-V (5), F-W (8), G-L (18), G-P (14), G-V (9), G-W (9), G-X (6), G-Y (8), H-M (19), H-V (10), H-W (13), H-X (5), I-Y (10), K-O (12), K-U (7), K-V (4), K-Y (6), L-W (13), L-X (6), L-Y (10), M-P (15), M-U (14), M-V (10), M-X (4), M-Y (7), N-P (19), N-W (14), N-X (6), O-U (15), O-V (9), O-W (13), O-X (6), P-S (19), P-V (8), P-W (8), P-X (4), P-Y (8), R-Y (10), S-U (16), S-V (10), S-X (6), T-V (10), T-Y (10), U-W (8), U-Y (7), V-W (7), V-Y (4), W-Y (6), The A-I pair is valid for 25 diagonals. We'll use it first. We therefore exchange columns B and I. Choice ? 7 Columns to permute (return to exit) ? (x,y) B,I Choice ? 6 A I C D E F G H B J K L M N O P Q R S T U V W X Y Z ------------------------------------------------------------------------------ L E O D M I F N H C P K G Q A Z D L H Q E N U X Y I G T W S M J F A K D T H I G R Z M W Q Y E U S F J C N W R Q S M D G A E F Y I K U Z P B O M P L E O D T K N U R Z S W F H X O B C Q G T F W U M H X I J Z Y A P A R S T Y B V O X J Z D Q C G L K Q T U I F R W P L K A N H V O M E S F V Z X O T J U D Q K L A B R Y G E N H U B A V S C X W M F G K J O Z D M S A R J Z H K E O C I T U P Y X W Q R Y V Z H U A G B E K N M C X C G F L W J R S Y T B V N P A H B V X N I F R E G Z H D J L C Q A P U H Q G Z L Y S E F N T D I V K G K X D H A P Q S I B W R U O J V L J Z P V M W A I C K D O H Y B L E T S N Y Q Z N S H O C K W P V J R T M B G G B U W Y O L E F N V D C Z T Q K F I N M P K A E Y J H X D G Z R L C Q S H J D B X M G L P T Z I V R A S I W F Y E S Z V T B L O M X K U Q V O R T Y E A X M G B S Q P U N N X A K V Q F Y M D L E I H W G W U C A L Z B Q P X S O I D K T M K O C D P B Q J X A S U G Y L I Choice ? If we inspect the first two columns, we can see that the order alphabetical is well respected in the different diagonals: DE, KL, CD, MN, OP, AB, … Getting started is the hardest part. For the future, we have two strategies:
Here is a manual rebuild after swapping the following columns: CF, ES, CX, GR, BT, KD, LN, JM, MK, LC, OH, EL, MP, BP, QV, JG, PY, QE, UW, QP, WQ, ZO, JO. We obtain the following table: Choice ? 7 Columns to permute (return to exit) ? (x,y) J,O Choice ? 6 A I F B S X R Z T K D N G C H M V O L Y Q E U P W J ------------------------------------------------------------------------------ L E M F Q G A N C O I Z P H D K D L E S F W M I N H U Y G X A Q J T K D R E Y U H M G T F W Z I S Q J C N Q D U K Z G F S W M E Y A O R P I B M P T W S F K E R L D U X Z N O H O B I X J Q U C T W Y M F P G Z H A A R Q D C T J B S V X L O Y G Z K Q T P V H O I A R U W K N L E F M S F O U B G A R Z Q T V J K D X L Y E N A F Z M G S U B J C V D W H K X O M S Z E Y P X O R T H A K I U C J W Q R Y K E N G Z H A B U V M C X C W J N V P R F Y G S A T H L B B V I C L Q E X H F R Z D G N A J P U H L T K N D G E Q Y F S Z I V G K A S J O V D W P X Q B R I L H U J Z I L N B E C V O W P A D H K M T Y S Y Q H K M T B N V O Z C P G J W S R G L Z C T U N Y B O F V E K W Q D F I K Y R Z S L M X A N E H D J Q P C G H J X A R S L Z M D G T I P B V I W Z X Q K V Y L F S B O T E U M V O Y P Q U X B E R A G N S M T N X V H I W A D Q F M L Y K E G W U O S I Z C P L Q K X B A D T M G U Y B O X D K P J A Q I C S L This table is easily completed. If we look at the permutations found, they correspond to those used to create the cryptogram... but shifted by three positions. Rotor : FQTGXANWCJOIVZPHYBDRKUSLEM (1st line) Lampboard : XAKHSZJLYWGPMIOURDBFTNVCQE L reverse : BSXRZTKDNGCHMVOLYQEUPWJAIF (column heads) Note: How to find adjacent columns? My program is very simple: We observe two columns and assume that they are adjacent. The diagonals (each limited to only two characters) must respect the limitations following:
The external key is known and different from ZMy program allows you to enter an external key (by default Z): C:\H1_TOOLS> python hebern1_tui.py -R =GADBOCTKNUZXIWHFQYJVPMELSR -K =KXVMCNOPHQRSZYIJADLEGWBUFT -E G < MSGS\p25.pln > MSGS\p25.cry C:\H1_TOOLS> python tb_pln_cry.py MSGS\p25.cry MSGS\p25.pln 1 - Print cryptogram and plain text 2 - Choose the key (Z by default) 3 - Create generatrix 4 - Print generatrix 5 - Change mode (cipher or decipher [by default]) 6 - Print ordered array 7 - Permute two columns of the ordered array 8 - Permute all columns of the ordered array 9 - Search columns fit 99- Quit Choice ? 2 Current value of the key: Z New value (return to keep the current value) ? G New value of the key: G Choice ? 1 Lg: 321 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ------------------------------------------------------------------------------ B O B W A L K E R S T O P S P E N T C H I K N B C B C U K V O K I T W P F Q O N S I D E R A B L E T I M E I N T A L K S O U T S N Q U W M F O R U R Y U J V C P R V L E D Y S E F A I D E T H E N E G O T I A T I N G T A B L E S T O P K V M H R F I N W P X Y S L Y H Y V L X O Q O D V O H A V E D I S C O V E R E D T H A T S H A W E N T E F W Q Z M D S W I T Y W V E V Z Q V J U U J W P F B R P R I S E W O U L D B E H A P P Y W I T H A O N E B Y A W B F E Y Z R U C V Q E D B N D N Y E X F G B A N D A H A L F P E N N Y D I S C O U N T O N I T E Z Q F T R A M I Q O D J M E Y R H A A F Y G T R F B M S O R D E R E D U N D E R O N E T H O U S A N D A R H X Q M F O N H W D A V D Q H T V S H M Y X P B V N D A T W O P E N N Y D I S C O U N T O N I T E M S S V G H Y R Z N L B V A J F G W O O M H P I K U N A A B O V E O N E T H O U S A N D S T O P S U G G E S Z R X O P R I N A J Z N Z Y U L K V O K I F D A I A T W E A C C E P T O F F E R A N D I N C L U D E T H O C M T N B H J A P B H V D E H N B Y O O F R U F I A T C U S T O M M A D E I T E M S D O N O T A P P L Z B J R B P B M C M U L J L C S K K O F J W X W M Z Y S T O P W A I T I N G I N S T R U C T I O N S S T C H R U S O K A A H D G J K D G F U E S G G T Q W C O P J O H N H A R R I N G T O N N Y H U R W G R P Z O J U L Q H Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: G Coord of Crypto : Abscissa: Plain , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- Z F K R S N B O C B- W R V Q Y H B C C- G J F M H X A U R Q D- T Z W U Q H R O E- N M P R S B Y F- A B F D W R P O G- K H G M I B Z O S E H- R H W N I A M Y J I- U H W C L I Q P A Z J- M K O J H R B P Z W T K- U Y B O D Z X N V L- B C A L H G Y J W U N M- S V U J C Z M N- Y E Q B V K D F L O- E G C Y U Q D V P- L Z P S H W D U R G Q- Q H N T Y R B F K O R- K B O A V U N S- L E S Y O J M A D T- X O U N E F H K S U- U G D O P J I Y M V- Q E I G T Y W F J W- X R W D T S O K X- U A R P F W Q D E Y- B I N G V M W F Z- V Q B I Z O A C Choice ? Choice ? 8 Permutation alphabet (return to exit) ? QWERTYUIOPASDFGHJKLZXCVBNM Permutation made... Choice ? 6 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M ------------------------------------------------------------------------------ B O C K N Z F S R C B Y W H V R Q M A R X G U F H J Q Z Q H R W U T O Y P S B M R N O F P D R A B W E H O B Z K S G M I N A Y J R I W H M P A Z I Q H W U L C O Z W H P M J R T K B N Y X V O Z U B D L W U N Y B A H G C J V M J S Z U C D L Y F E Q B K V C V Y Q E D G U U G P W D R L Z H S T F O B Q K N Y H R V N U B A K O D M A O L J S E Y S N H K U E O X F Y M G J U I D O P J Q W F I G T Y E W K S X O R D T U D E R F W Q A P I F V M W B G N B C O V A I Z Q Choice ? The first line (after reconstruction of the board) provides the wiring of the rotor: GADBOCTKNUZXIWHFQYJVPMELSR. The order of the columns corresponds to the reverse permutation of the Keyboard: QWERTYUIOPASDFGHJKLZXCVBNM The keyboard wiring being KXVMCNOPHQRSZYIJADLEGWBUFT. Unknown Rotor and LampboardCreation of the cryptogramm: C:\H1_TOOLS> python hebern1_tui.py -R c5 -L RFS < MSGS\p100.pln > MSGS\p100_3.cry C:\H1_TOOLS> python groupe.py < MSGS\p100_3.cry HYVDG RMYKO GYLCW OWRZA FDXBU DYSOV GPIYU HMDGG NZIJH LFLXB UAPRH AUKJO WCJAU KKWDY PCPDA TMJMB HRCVF DQJLK BAUUN AREZV ATVKN KCVPX FPPOZ CLETC MQXOM PICNY ZJVHD SFAYW HAQDO MKJMC FDJIV OAGHZ GDBGP SIFCD OBKYR RMGJK APSVC EVLVC AOFNE AFZEE MGEVW JXLAM KHHKV GPTZX VDPWD JBGMH VVXHH BZNDK EYXCN ZGWYB LTWNP BWHAU HXGIJ LEYPS XZJQN WMJMC MGCFT TTNPT SKDOP CYSBA NBLTW NPBWK XQOBT TSKZY ADZCK SUGKA WNMGZ YEBAG ZHDXP OXSJR NJGBL TWNPB WKXQA OFPPI RWNTJ ZBEEG GOTNM GZYOD FACVG ZGYJS VKBAN JLCSG XLJCQ WHFJI TGEYU QHZED KKGNZ OSDFI TUZPF IZRGT XZWDK WMRYE CAYVC HSWBF MXHGQ WJBMR VDLDI EUNCV EQEOH NCIDS FNERU FKCFF XJPUQ YCCTA HIHNH KVIQA AAEBP OWJFP VPVTR PHYVP IHXMF NIFRE KMFXW QQPWF NZHPN TSUXG PSJZN KQWKY RXBLQ QEWHP CVGWV RARXY WHNYD VZAMK ZYNTP FMJSL XTKGA XNTXB LUTUF IZMED YBHNH TFMQY WKGEO DFXON PFVTT DFPRN DSFQQ DZAUX KHQVW GMHZM EDYBH NHTFG PSJZE EOBEE SKFJC ZXSDO ZEJSJ EDQHZ RBQZK RRLIP HEQYD OZAGX GTAEW XBBFE LJUJF UYYRB AOVES UGTCQ MZTZY QKARP FJAIC DIFFM PGGWK SZAXB ESBLL OPDVV CDHNK KBPWW XOWIV BGZSY WLPLJ FRNMV ZPIHX TQJZC LBNBL OTISL JYODD OZLEU AGQTV YCPUW IETVF KEMAT BKZDD SFNKD EZLDO WREPE FMLEI DOBGF JUXFW MLRVT MKDNM AMGYK TDFKZ RUKWG QNUIR HNWRE URFAT ISOOE TMFUD ELJJV KQUUY JEHXH VBVQE PJIAA FZWGU KKTXO QVRHX HXYAW EIUGS AJELQ MZGUX WBXOA GPVIE BMJHK EMMWY YMTVP BDIKT YFDIE CDYPG MAXFA STQYL VNGSR FCZPM IXOHI GWLRE YFOBZ BKGSI WTVSS VQEDP NNDIG NYFOG ZEKGS LIRXM BLYAR PPAIF UVOLY QXTKO OJZTR MLCKX QASSD GVFAW OYRIH UBOVR XOJVL RNLPG IAYXF LQUIO XKHVO TDQFY QEOHY KDDUF EFTTZ NHUMR AWLMB YMVZA SFPPD MGWSY KJGNR TRKKM VWYAU ZPUGD PRYHC AKKBO DIQSC MGJGJ TSLVU ZURWK GJXTW MYLJF CQCII TSYXJ MAHFM SUZZK CPZEZ BFNKV VQTPP FVIPD ETGLC IPNCipher table display: C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100_3.cry MSGS\p100.pln 1 - Print cryptogram and plain text 2 - Choose the key (Z by default) 3 - Create generatrix 4 - Print generatrix 5 - Change mode (cipher or decipher [by default]) 6 - Print ordered array 7 - Permute two columns of the ordered array 8 - Permute all columns of the ordered array 9 - Search columns fit 99- Quit Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: Z Coord of Crypto : Abscissa: Plain , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- M S I A T Z O B F P N D Y E H L B- N M P K R Y F L G B X A O S J I E V C- H U R G V T K A M Z P N F C S J O D- E L A I P X V M Z K U R G T D H N F J W E- I Z J C G U H V E L A P S B D T F F- R H A U S L I Z G K M W X P D T V Y G- D Z E F N I J R A V B M G X P Q W H- N R O D Y C F T Z Q E W A M G P I I- L Y X T W H D P S J K Q E U A F N C J- T M S G N C Y J O R E Z D Q A B H U W K- U G V N M A B H I T Q F Y L X J Z W E L- A Z S C X D T I Y F R K N V M- J W E R K N G X C T I U L V B Q O N- K V B S U A D G H P C E X Q W T J Z O- Y Q W N E X U G O M K P F B T L P- C J K B O R M E Z S Y U H F G D W Q Q- F V W Y L O R B N T E S D Q X K I G M J R- Q K T I E Y L W R O N X J Z V C A U S- P C O T K L W B M F R U H Z S E X T- G H Y P C V I K A U D L E J R N O X F Q U- S G Q C V Z P E X I O F N B Y M V- P A S J H G V M C Y D B I U L K F W- Z F J L A Q Y H T X W C E I V M X- B F I Z J T E M K H V G C Q Y L Y- X C R O N U V S Q A J T E M I Z- W H L D Y B A Q N J Z T S P O U R K Choice ? 9 Note: don't use the ordered table A-B (14), A-K (12), B-C (13), B-D (10), B-F (7), B-H (14), B-I (15), B-M (11), B-O (14), B-U (9), B-V (4), B-W (10), B-X (5), C-D (15), C-F (9), C-P (16), D-E (19), D-K (8), D-X (4), E-F (14), E-K (12), E-U (16), E-X (6), F-G (10), F-H (12), F-K (7), F-M (10), F-N (14), F-R (13), F-S (14), F-V (5), F-W (8), F-X (4), F-Y (6), G-H (17), G-I (19), G-K (7), G-N (19), G-U (12), G-W (9), G-X (6), G-Y (8), H-I (24), H-K (12), H-U (14), H-X (5), I-K (12), K-L (11), K-P (10), K-R (11), K-U (7), K-V (4), K-W (6), L-M (20), L-W (13), L-X (6), M-N (21), M-U (14), M-X (4), N-O (25), N-X (6), O-P (18), P-U (10), P-X (4), R-S (25), R-U (16), R-X (6), S-T (26), S-U (16), T-U (16), T-X (6), U-V (7), U-W (8), V-W (7), V-X (4), V-Y (4), W-Y (6), As we can see, the columns are well ordered. Just read the diagonal: EUM, ILR, RZA, TYO, UMX We obtain the diagonal: EUMX, ILRZA Let's add sequences: FJQ, QVK, GPT, SHC, ZAG The diagonal is filled: EUMX, ILRZAGPTYO, FJQVK Let's add other sequences: GPTYOEU, MXDFJQ The diagonal is complete: ILRZAGPTYOEUMXDFJQVKWBNSHCIt is now possible to complete the table and then we will be able to decipher any message: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A M S I X A T W Z O J B F R P N D G Y E H Q L C V U K B N C M Z P K R Y F W D L G B X A T O S J I H Q E V U C H U R G V L T D K X I A W M Z P Y N F C S J O Q E B D E L A Q I P X V M C Z K U R G T B D H N F Y J O W S E I Z J C G M Q U H R V E L A P W X S B D T F Y K N O F R F H A U J E S L Q O I Z G K M N W X P D T V B Y C G D S Z E F O N I J Y C R A V U B K M G X P Q W T H L H N R O D Y B C F T H L Z Q E W V U A M G J K P S I X I L Y X T W H D P S I R J O K Q E Z U A F V G N C M B J T M P K S X G N C L F Y V J O R E Z D Q A B H U W I K U G V N M A B H I D T Q F Y L O R X J Z W S E K C P L A Q B U Z W S C X P J D T I Y L M F R K N O V H G E M J W E R K N H M G F X P C T I U D L V B Y Q S A O Z N K O L V B S U A D M G H P C E X I Q W T J N Z Y R F O Y I Q W N E Z X U A S G H O M C J K P F B R T L D V P C J K B O R M E Z N A S Y U H F V G D W L P I X Q T Q F V W Y L U O R B Z N T E S D Q A X K I G C M J P H R Q K T I E Y L W R B P O N X J Z M V C A H U F G S D S V P C O T I K L W G Y B M F R U Q H Z S E D A N X J T G H Y P C V I K A T W U D L E J S R N O X Z B M F Q U S T G H Q C V Z P K E X I O F N L B Y M R W U D J A V P A S J H Q R G V O M C Y D B I W T U L K E X F Z N W Z N F S J L A Q Y U H T X W C K P E I V O M D R B G X B D N F I Z J T E S P M K H V G O C Q Y U X L W A R Y X B D C R F P O N G U V S Q A Y H J T E M I K Z L W Z W X H L D G Y B A E Q N J Z T S F P O U C V R I K M Rotor, Keyboard and Lampboard unknownFirst step: write cryptogram in 26 columnsThe first step is to write the plain text and the cryptogram in increments of 26 letters and starting with the key + 1 (the rotor advances before encryption). Then we transfer the letters into a 26x26 table whose columns correspond to the plain text letters and the lines to the position of the rotor. C:\H1_TOOLS> python hebern1_tui.py -R =GADBOCTKNUZXIWHFQYJVPMELSR -K =KXVMCNOPHQRSZYIJADLEGWBUFT -L =BLACKHORSEDFGIJMNPQTUVWXYZ -E G < MSGS\p25.pln | python groupe.py RSDIL ALAUD VJDST WMHNI NUWGH JPUPY UEVAM PVFKC YQKHB DVGRP HSIWM XYQFY RYVFX JNJCV JHWNZ GCQWS TYWVK VZNVE UUEWM HLLYB WLHKY ZPUAV NKCLI CIYKX HOLZN HTPBG SNJCE GKYPR BBHYO TPHLP RXNGH JIRWC BVCNR TVQRG YXMLV QVORY PZIFL VBEHO WJJGR MSDUI BZPXJ MPSIB EZIZY UFDVJ DSHCB SBJAG TILRE BMLRV CKRIL YJJHP UHSZL EPLML GAGUF EFAQD DJHEW XWGZA RPUQJ DBBRC OEDCO HUKQO OTNWA IYRUP WOPMZ JEUFN R C:\H1_TOOLS> python tb_pln_cry.py MSGS\p50_2.cry MSGS\p25.pln 1 - Print cryptogram and plain text 2 - Choose the key (Z by default) 3 - Create generatrix 4 - Print generatrix 5 - Change mode (cipher or decipher [by default]) 6 - Print ordered array 7 - Permute two columns of the ordered array 8 - Permute all columns of the ordered array 9 - Search columns fit 99- Quit Choice ? 2 Current value of the key: Z New value (return to keep the current value) ? G New value of the key: G Choice ? 1 Lg: 321 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ------------------------------------------------------------------------------ B O B W A L K E R S T O P S P E N T C R S D I L A L A U D V J D S T W M H N O N S I D E R A B L E T I M E I N T A L K S O U T S I N U W G H J P U P Y U E V A M P V F K C Y Q K H B I D E T H E N E G O T I A T I N G T A B L E S T O P D V G R P H S I W M X Y Q F Y R Y V F X J N J C V J H A V E D I S C O V E R E D T H A T S H A W E N T E H W N Z G C Q W S T Y W V K V Z N V E U U E W M H L R P R I S E W O U L D B E H A P P Y W I T H A O N E L Y B W L H K Y Z P U A V N K C L I C I Y K X H O L A N D A H A L F P E N N Y D I S C O U N T O N I T E Z N H T P B G S N J C E G K Y P R B B H Y O T P H L M S O R D E R E D U N D E R O N E T H O U S A N D A P R X N G H J I R W C B V C N R T V Q R G Y X M L V N D A T W O P E N N Y D I S C O U N T O N I T E M S Q V O R Y P Z I F L V B E H O W J J G R M S D U I B A B O V E O N E T H O U S A N D S T O P S U G G E S Z P X J M P S I B E Z I Z Y U F D V J D S H C B S B T W E A C C E P T O F F E R A N D I N C L U D E T H J A G T I L R E B M L R V C K R I L Y J J H P U H S A T C U S T O M M A D E I T E M S D O N O T A P P L Z L E P L M L G A G U F E F A Q D D J H E W X W G Z Y S T O P W A I T I N G I N S T R U C T I O N S S T A R P U Q J D B B R C O E D C O H U K Q O O T N W A O P J O H N H A R R I N G T O N I Y R U P W O P M Z J E U F N R Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: G Coord of Crypto : Abscissa: Plain , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- Z H D P Q I L J A B- W P V N Y R L A C- O E H G R X B U P N D- T Z W U N R P J E- I G M P Q L Y F- B L H C W P M J G- D R O G S L Z J Q K H- P R W I S B G Y E I- U R W A F S N M B Z J- G D J E R P L M Z W T K- U Y L J C Z X I V L- L A B F R O Y E W U I M- Q V U E A Z G N- Y K N L V D C H F O- K O A Y U N C V P- F Z M Q R W C U P O Q- N R I T Y P L H D J R- D L J B V U I S- F K Q Y J E G B C T- X J U I K H R D Q U- U O C J M E S Y G V- N K S O T Y W H E W- X P W C T Q J D X- U B P M H W N C K Y- L S I O V G W H Z- V N L S Z J B A Choice ? Second step : anagramming plaintext letters columnsThe next step is to rearrange the columns to produce diagonals that correspond to the inverse of the Keyboard permutation. Choice ? 8 Permutation alphabet (return to exit) ? QWERTYUIOPASDFGHJKLZXCVBNM Permutation made... Choice ? 6 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M ------------------------------------------------------------------------------ L J A D I Z H Q P A L Y W R V P N G B P X O U H R E N Z N R P W U T J Y M Q L G P I J H M C P B L W K R J L Z D Q O G S I B Y E P S W R G M B Z S N R W U F A J Z W R M G E P T D L I Y X V J Z U L C F W U I Y L B R O A E V G E Q Z U A C F Y H K N L D V A V Y N K C O U U O M W C P F Z R Q T H J L N D I Y R P V I U L B D J C G B J F E Q K Y Q I R D U K J X H Y G O E U S C J M E N W H S O T Y K W D Q X J P C T U C K P H W N B M S H V G W L O I L A J V B S Z N Choice ? In the example, we gave the final result. In fact we reorganized the columns based on the following diagonal. We discovered it as the columns were permuted. It corresponds to the Lampboard permutation. B L A C K H O R S E D F G I J M N P Q T U V W X Y Z We also deduced the Keyboard permutation, which is the inverse of the column heads (QWERTY...). K X V M C N O P H Q R S Z Y I J A D L E G W B U F T Step three : anagramming cryptogram letters columnsWe can also try to reorganize the columns of the cipher letters. This step can be carried out as an alternative to the previous step. If this step is carried out after the previous step, this allows confirmation of the permutations found. If this step is carried out at the same time, it allows deductions to be made which help to find the solution more easily. Choice ? 5 Current value of the mode: Cipher(C) New value (return to keep the current value) [C/D] ? D New value of the mode: Decipher(D) ...Now, you need to generate again the generatrix! Choice ? 3 Choice ? 4 The Rotor Generatrix Tableau. Key: G Coord of Plain : Abscissa: Crypto , ordinate: Position of rotor A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A- Y I H O T R M N A B- W T N B S D A P C- R C E D V A T J S O D- V R U T A O I E E- D C S E H P W F- A I E W C T O N G- A L R W O H S E N P H- I P M E A B F C O I- M T N R P D O B G U J- B H A E N O L I V U R K- N W I F D Y T E O L- B D N E U A G F T R I M- L I Y A G E S N- R N T S D K H M A O- E S A O C N T I P- P D I T S M N R O H Q- S R D U P A N C E G R- O D Y N I U T S- U W S A T O C H N T- P N I C L T O H B U- K O U L N I S A T V- W U H E O I P T S W- G T S D O N E A X- G T O U N S I E P Y- P T M D N E O S Z- T S P E C H A L Choice ? ... Choice ? 6 L A C K H O R S E D F G I J M N P Q T U V W X Y Z B ------------------------------------------------------------------------------ R Y H I O T M N A T W S N B D A P D A J C E V T S O R T V R U A O I E S D C E H P W C I E W T O N A O W H E N A L R S P B F P M E A C O I M D O N R P B G U T N I H B A E O L V U R F N W I D Y T E O A B G F N E U T R I D L I Y A G E S K R D S N T H M A E S A C O N T I P T N D I S M R O H P R C S D U A N E G I D Y N U T O W C S A T O H N U L N O P I C T H B K I S O U L N A T H U O I W E P T S G T S D O N E A T U O N S I E P G D T N E P M O S E T H P C A L S In this approach, the diagonals correspond to the inverse permutation of the keyboard permutation (QWERTY...), and the column heads correspond to the Lampoard permutation. Step four: find the rotor wiringWhen we have reconstituted the encryption table, the first line will allow us to find the rotor wiring. We search for the position of each letter of line A in the alphabet Lampboard. The corresponding letter of the rotor wiring has the same position, but in the ordered alphabet (ABC...Z). So, the letter O is in the sixth position in the Lampboard permutation (BLACKHO). The letter number 6 in the alphabet (ABCDEFG) is G. G becomes the first connection of the rotor. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 Row A: O B C L J A T D I U Z X S W R H N Y E V M G K F Q P Output: B L A C K H O R S E D F G I J M N P Q T U V W X Y Z Position:6 0 3 114 2191013202523 822 7 51624 9211512 4111817 Alpahbet:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Wiring: G A D B O C T K N U Z X I W H F Q Y J V P M E L S R |