Home Page Hebern's machines The 5 rotors machine home page |
IntroductionIf the wiring of the rotor in position V (fast rotor) is reconstructed, the plain text of the cryptograms encrypted by the Hebern machine can be (more or less easily) deciphered. We can see that this is the most important step. Friedman achieved this feat by inventing a new statistical method, the interval method, which we will describe in this page. Note: I have called Friedman's method the "interval method". Friedman does not use any particular name. The plan of this Page
Analysis of the Hebern machine, concept of Basic Cipher text SequenceIf we look at the encryption table of a Hebern machine, each column corresponds to the encryption of the same letter (E, T, A, etc.). Friedman calls these columns: “Basic cipher-text sequence". If we have a sequence of cryptograms for which the right rotor (Fast-rotor) is always the same, the basic cipher-text sequences are used throughout the messages without alteration. Simply, their position (the column number) varies every 26 letters, as the other rotors move forward and the keyboard wiring equivalent of the 1-rotor machine changes accordingly. We can see that every 26 letters, the meaning of the columns changes: a column no longer corresponds to the same letter in plain text. Knowledge of all basic cipher-text sequences is sufficient to decipher any cryptogram in the case of a 1-rotor Hebern machine (because the keyboard permutation does not change). In the case of a 5-rotor machine, every 26 letters, we have isomorphic messages (encrypted with a simple substitution, but different each time). In the following example, we have 26 cryptograms. Each cryptogram corresponds to the encryption of a single letter encrypted 52 times. The plain text of the first cryptogram therefore begins with "AAAA...", the second with "BBBB....", etc. We choose the external key such that only the rotor V advances for each slice of 26 letters. C:\H5_TOOLS> echo "AAAA" | python hebern5_tui.py -E ZZAAAZN YOND 0 5 10 15 20 26 30 35 40 45 50 A YONDSWMAUZXFLQKGXVHRBTECJP RGWULZAQOVFTCPHYENMDIYXKSJ B QISFTDPJVAWNYJBLGHEXRKOUMC UVEWNYHIMWCGORDQPSXFJZBALK C UVEWNYHIMWCGORDQPSXFJZBALK NXZGPKUWQOLYIEMHDJREFBCVAT D APVIGUFYWSMZKBNOLETCQHJIRD JWXCRQYHILDPFMANZBGTKOUSGE E CQOJYVWPNHEVSZTIMFABUXDLKR DAPTWMBVEROLUXCFQZUJNIKGYS F RGWULZAQOVFTCPHYENMDIYXKSJ ZYDVUSIFPNHCMAXERWLKZGQTOB G DAPTWMBVEROLUXCFQZUJNIKGYS GTYBXNKUZERMDIJVAMQSLWPOHF H KUBSOCLXBIPEZFVTHDJQANGRWM WRTXQENCDGBSHUZMOLKIVRAJPY I LHJYFTQKGBSOQNRPCUDZWEMXIV TKLPMJOBHXAWNSERUYIVCQLZFG J SCULZFSRYMGQWOIJVKPHTANDBX APVIGUFYWSMZKBNOLETCQHJIRD K PBMRAGVEKJYITCOUSXFLODWHQZ CQOJYVWPNHEVSZTIMFABUXDLKR L ZYDVUSIFPNHCMAXERWLKZGQTOB VEQOKBTSCUKHAYLXJGNMDFRWZI M OFKMHLJTSCIXGDUZBRWAPVYENA BDIZVOCLRFTJXGSANPYWEMHPUQ N HJCNDPXGFQZKBTFWIASOMLVYEU PBMRAGVEKJYITCOUSXFLODWHQZ O WRTXQENCDGBSHUZMOLKIVRAJPY SCULZFSRYMGQWOIJVKPHTANDBX P VEQOKBTSCUKHAYLXJGNMDFRWZI YONDSWMAUZXFLQKGXVHRBTECJP Q GTYBXNKUZERMDIJVAMQSLWPOHF OFKMHLJTSCIXGDUZBRWAPVYENA R MNHEIRDNLTUAJKYCFQVGSPZBXW HJCNDPXGFQZKBTFWIASOMLVYEU S ESFHBXGMADJRVWPDKCZNYUIQTO IMRAJHZOXPVBELQKWTCYGSFNDH T IMRAJHZOXPVBELQKWTCYGSFNDH LHJYFTQKGBSOQNRPCUDZWEMXIV U BDIZVOCLRFTJXGSANPYWEMHPUQ FLAKEIRZJYQDPHGSTOBUXCTMVN V NXZGPKUWQOLYIEMHDJREFBCVAT QISFTDPJVAWNYJBLGHEXRKOUMC W JWXCRQYHILDPFMANZBGTKOUSGE XZGQCAEDTKNURVWBYIOPHJSFCL X XZGQCAEDTKNURVWBYIOPHJSFCL ESFHBXGMADJRVWPDKCZNYUIQTO Y TKLPMJOBHXAWNSERUYIVCQLZFG KUBSOCLXBIPEZFVTHDJQANGRWM Z FLAKEIRZJYQDPHGSTOBUXCTMVN MNHEIRDNLTUAJKYCFQVGSPZBXW We can see that each line is divided into two sequences of 26 letters. Each sequence corresponds to only one of the 26 basic cipher-text sequences possible (here online instead of being in columns as in the case of a cipher table). Simply, when the other rotors (I,II,III,IV) move forward, the same clear letter no longer uses the same basic cipher-text, but another. In the following example, we have cryptograms which also correspond to the encryption of a single letter but the effect of the Lampboard permutation has been removed (you obviously need to know it). A BCPHQNFXEWGIUKMYGLRVOADSJZ VYNEUWXKCLIASZRBDPFHTBGMQJ B KTQIAHZJLXNPBJOUYRDGVMCEFS ELDNPBRTFNSYCVHKZQGIJWOXUM C ELDNPBRTFNSYCVHKZQGIJWOXUM PGWYZMENKCUBTDFRHJVDIOSLXA D XZLTYEIBNQFWMOPCUDASKRJTVH JNGSVKBRTUHZIFXPWOYAMCEQYD E SKCJBLNZPRDLQWATFIXOEGHUMV HXZANFOLDVCUEGSIKWEJPTMYBQ F VYNEUWXKCLIASZRBDPFHTBGMQJ WBHLEQTIZPRSFXGDVNUMWYKACO G HXZANFOLDVCUEGSIKWEJPTMYBQ YABOGPMEWDVFHTJLXFKQUNZCRI H MEOQCSUGOTZDWILARHJKXPYVNF NVAGKDPSHYOQREWFCUMTLVXJZB I URJBIAKMYOQCKPVZSEHWNDFGTL AMUZFJCORGXNPQDVEBTLSKUWIY J QSEUWIQVBFYKNCTJLMZRAXPHOG XZLTYEIBNQFWMOPCUDASKRJTVH K ZOFVXYLDMJBTASCEQGIUCHNRKW SKCJBLNZPRDLQWATFIXOEGHUMV L WBHLEQTIZPRSFXGDVNUMWYKACO LDKCMOAQSEMRXBUGJYPFHIVNWT M CIMFRUJAQSTGYHEWOVNXZLBDPX OHTWLCSUVIAJGYQXPZBNDFRZEK N RJSPHZGYIKWMOAINTXQCFULBDE ZOFVXYLDMJBTASCEQGIUCHNRKW O NVAGKDPSHYOQREWFCUMTLVXJZB QSEUWIQVBFYKNCTJLMZRAXPHOG P LDKCMOAQSEMRXBUGJYPFHIVNWT BCPHQNFXEWGIUKMYGLRVOADSJZ Q YABOGPMEWDVFHTJLXFKQUNZCRI CIMFRUJAQSTGYHEWOVNXZLBDPX R FPRDTVHPUAEXJMBSIKLYQZWOGN RJSPHZGYIKWMOAINTXQCFULBDE S DQIROGYFXHJVLNZHMSWPBETKAC TFVXJRWCGZLODUKMNASBYQIPHR T TFVXJRWCGZLODUKMNASBYQIPHR URJBIAKMYOQCKPVZSEHWNDFGTL U OHTWLCSUVIAJGYQXPZBNDFRZEK IUXMDTVWJBKHZRYQACOEGSAFLP V PGWYZMENKCUBTDFRHJVDIOSLXA KTQIAHZJLXNPBJOUYRDGVMCEFS W JNGSVKBRTUHZIFXPWOYAMCEQYD GWYKSXDHAMPEVLNOBTCZRJQISU X GWYKSXDHAMPEVLNOBTCZRJQISU DQIROGYFXHJVLNZHMSWPBETKAC Y AMUZFJCORGXNPQDVEBTLSKUWIY MEOQCSUGOTZDWILARHJKXPYVNF Z IUXMDTVWJBKHZRYQACOEGSAFLP FPRDTVHPUAEXJMBSIKLYQZWOGN C:\H1_TOOLS> echo THEELEMENTSOFTHESCIENCEOFC | ^ python hebern5_tui.py -E OZAAAZN IUOJUVJPFPJSCLVIKSDBMZDJSKA cryptogram can be expressed as a series of letters each belonging to a basic cipher-text sequences. We can therefore (for each slice of 26 letters), decompose our cryptogram into a series of mono-substitutions if we know the set of basic cipher-text sequences. plain theelementsofthescienceofc crypto IUOJUVJPFPJSCLVIKSDBMZDJSK OJ V P I B D E CQOJYVWPNHEVSZTIMFABUXDLKR I P L T IMRAJHZOXPVBELQKWTCYGSFNDH S J O WRTXQENCDGBSHUZMOLKIVRAJPY Frequency of letters and letter repetitionsThe frequency of letters in a cryptogram does not provide any information: the distribution of letter frequencies is "flat": the probability is 1/26 for each letter of the cryptogram. Probability of having a repetition of a letter at a given intervalThe probability of having a repeated letter is greater, in English, for a given interval, than the probability of having two different letters. So, in English:
Thus, the probability of having any two letters repeated corresponds to the sum of the probabilities of each letter squared: P1 = sum from i=0 to 25 ( P(i)** 2 ) = 0.016 + 0.008 + ... = 0.066 However, the inverse probability (probability of having 2 letters diff) is equal to : P2 = 1 - 0.066 = 0.934 = P(E...T) + P(E...A) +...Note: P(E...T)=probability of having the letter "E" separated by three letters from the letter "T". If we fix the first letter, for example "Y", the second is most likely any letter except a "Y"! On the other hand, individually, for each letter studied (A,B, ....X,Z) the probability is P3 = 0.934/25 = 0.037 As we can see, the value 0.037 is much lower than 0.066, so we will be able to detect the difference. What has been said about a repetition of a letter is valid whatever the interval between the two letters: XY, X.Y, X..Y, XY, etc... We can use any intervals, but if the interval is too small, we have side effects due to frequent multigrams: "ER, RE, TION, MENT, ..." which disrupt the statistics. Consequently, we will take intervals of a minimum value of 3 letters. This type of interval will be named 4 corresponding to the index of the second letter (X...Y) = [0]=X,?,?,?,[4]=Y. The first interval methodPrepare the cryptogram for analysisThe first step is to create a single cryptogram from the different cryptograms collected during the day. These cryptograms must respect the fact that each column corresponds to a particular position of the rotor V.Notes: This step was partly carried out when we presented the cryptograms of the 1924 challenge (link). In my example, I simplified my life by analyzing a single large cryptogram. Intervals and the basic cipher-text sequenceThe reconstruction of the rotor wiring is done in several stages:
Friedman tells us that his first method requires an enormous amount of data: nearly 169,000 letters. But even if this quantity of data seems enormous, it is less than a day's traffic. I have not tested this method in the case of the Hebern 5 rotors machine, but I tested it for the Hebern 1 rotor machine (link). Of course, using this method is simpler in this case, for example, knowledge of the external key is not required. I analyzed a big text of 40,000 letters. I could have taken a much shorter text (at least half as short), but I would have had more difficulty finding the rotor wiring. Friedman's statistical method version 1 applied to the analysis of a Hebern 1 rotor machine: The second method of intervalsFriedman evolved his method. Instead of searching for one (or more) basic cipher-text sequence, in an improved version, it directly searches for the wiring of the rotor V. The advantage is that each pair of letters in the wiring can be calculated from an accumulation of statistics and thus require much fewer letters: no more than 2,000 letters. In the following example, the first line corresponds to the objective: the wiring of rotor V (possibly offset). Each column corresponds to a basic cipher text sequence and therefore to the encryption of the same letter (but limited to a single slice of 26 letters). In the example we chose to remove the effect of permutation lampboard. Friedman does not. Consequently, the diagonals correspond precisely to this permutation (lampboard). Here it is simply the direct alphabet (ABC...Z). The ordinate (AB...Z) corresponds to the external key. Suppose that in the cryptogram the following interval, "B...Q" located in the first position (external key A) of each series of 26 letters is very frequent because B and Q correspond to the same letter, we can deduce that the letters "B...U" are part of the rotor wiring separated by three letters. Likewise if the following interval "Z...O" located in position 3 (external key C) is frequent, its frequency also contributes to the couple "B...U". Likewise, if the interval "Q...E" located in the 5th position (external key E) is very frequent, we can deduce that the letters "U...M" are part of the wiring of the rotor V separated by three letters. We can use other intervals, thus the interval "Z.......C" located in the 3rd position (external key C) is frequent, this allows us to deduce that the letters "B.......M" separated of 7 letters are part of the V rotor wiring. We can see that if we multiply the measurements at different intervals and if the statistics are good (they will be better as the number of letters analyzed is greater), we manages (more or less quickly and easily) to reconstruct the wiring of the rotor V. Friedman estimates that it takes at least 2,000 letters to achieve a correct result. A J O I V Z P H M B D R K U S L E M F Q T G X A N W C B X A C T R L C Z B P S Q J K D A H R P B J E N Q O I F F P N H A G O M F G K H L X F M I D E Y J V D W O K C G Q L U I C M E U K ... Example of reconstitution of rotor V wiringWe encrypt a messageWe take a message of approximately 8,000 letters. A priori it will be easy to find the solution.C:\H5_TOOLS> more MSGS\conf_naval.pln THEWASHINGTONNAVALCONFERENCEWASADISARMAMENTCONFERENCECALLED BYTHEUNITEDSTATESANDHELDINWASHINGTONDCCOMMAFROMNOVEMBER TWENTIETHONENIVETWOONECOMMATOFEBRUARYSIXTHONENIVETWOTWOZDOTZITWAS CONDUCTEDOUTSIDETHEAUSPICESOFTHELEAGUEOFNATIONSZDOTZITWAS ATTENDEDBYNINENATIONSPARENTHEUNITEDSTATESCOMMAJAPANCOMMACHINACOMMAFRANCECOMMA THEUNITEDKINGDOMCOMMAITALYCOMMABELGIUMCOMMATHENETHERLANDSCOMMAANDPORTUGALPAREN REGARDINGINTERESTSINTHEPACIFICOCEANANDEASTASIAZDOTZGERMANYWAS NOTINVITEDTOTHECONFERENCECOMMAASRESTRICTIONSONITSNAVYHAD ALREADYBEENSETINTHEVERSAILLESTREATYZDOTZSOVIETRUSSIAWASALSO NOTINVITEDTOTHECONFERENCEZDOTZITWASTHEFIRSTARMSCONTROL CONFERENCEINHISTORYCOMMAANDISSTILLSTUDIEDBYPOLITICALSCIENTISTS ASAMODELFORASUCCESSFULDISARMAMENTMOVEMENTZDOTZ STOP HELDATMEMORIALCONTINENTALHALLCOMMAINDOWNTOWNWASHINGTONCOMMA ITRESULTEDINTHREEMAJORTREATIESCOLONFOURPOWERTREATYCOMMAFIVEPOWER TREATYPARENMORECOMMONLYKNOWNASTHEWASHINGTONNAVALTREATYPARENCOMMATHE NINEPOWERTREATYCOMMAANDANUMBEROFSMALLERAGREEMENTSZDOTZTHESETREATIES PRESERVEDTHEPEACEDURINGTHETHENINETEENHUNDREDANDONEYEARS BUTWERENOTRENEWEDINTHEINCREASINGLYHOSTILEWORLDOFTHE GREATDEPRESSIONZDOTZ STOP THEWORLDSPOPULARMOODWASPEACEANDDISARMAMENT THROUGHOUTTHENINETEENHUNDREDANDONEYEARSZDOTZWOMENHADJUSTWON THERIGHTTOVOTEINMANYCOUNTRIESCOMMAANDTHEYHELPEDCONVINCE POLITICIANSTHATMONEYCOULDBESAVEDCOMMAVOTESWONCOMMAANDFUTURE WARSAVOIDEDBYSTOPPINGTHEARMSRACEZDOTZACROSSTHEWORLDCOMMALEADERS OFTHEWOMENSSUFFRAGEMOVEMENTFORMEDINTERNATIONALORGANIZATIONS SUCHASTHEINTERNATIONALCOUNCILOFWOMENANDTHEINTERNATIONAL WOMANSUFFRAGEALLIANCEZDOTZ STOP ATTHEENDOFWORLDWARONECOMMATHEBRITISHSTILLHAD THELARGESTNAVYAFLOATCOMMABUTITSBIGSHIPSWEREBECOMINGOBSOLETECOMMA ANDTHEAMERICANSANDTHEJAPANESEWERERAPIDLYBUILDINGEXPENSIVE NEWWARSHIPSZDOTZBRITAINANDJAPANWEREALLIESINATREATYTHATWAS DUETOEXPIREINONENIVETWOTWOZDOTZALTHOUGHTHEREWERENOIMMEDIATE DANGERSCOMMAOBSERVERSINCREASINGLYPOINTEDTOTHEAMERICANDASHJAPANESE RIVALRYFORCONTROLOFTHEPACIFICOCEANASALONGDASHTERMTHREAT TOWORLDPEACEZDOTZBYTHENCOMMACONSIDERINGTHEIRCOLONIALINTERESTS INASIACOMMATHEBRITISHDECIDEDTHATITWASBETTERFORTHEMTOCAST THEIRLOTWITHWASHINGTONTHANTOKYOZDOTZTOSTOPANEEDLESSCOMMAEXPENSIVECOMMA ANDPOSSIBLYDANGEROUSARMSRACECOMMATHEMAJORCOUNTRIESSIGNEDA SERIESOFNAVALDISARMAMENTAGREEMENTSZDOTZ STOP AMERICANDELEGATIONCOMMALEDBYSECRETARYOFSTATECHARLES EVANSHUGHESCOMMAINCLUDEDELIHUROOTCOMMAHENRYCABOTLODGEANDOSCAR UNDERWOODCOMMATHELASTBEINGTHEDEMOCRATICMINORITYLEADERINTHE SENATEZDOTZTHECONFERENCESPRIMARYOBJECTIVEWASTORESTRAIN JAPANESENAVALEXPANSIONINTHEWATERSOFTHEWESTPACIFICCOMMA ESPECIALLYWITHREGARDTOFORTIFICATIONSONSTRATEGICALLY VALUABLEISLANDSZDOTZITSSECONDARYOBJECTIVESWEREINTENDEDTO OBTAINANULTIMATELIMITTOJAPANESEEXPANSIONANDALSOAN ALLEVIATIONOFCONCERNSOVERPOSSIBLEANTAGONISMWITHTHEBRITISHZDOTZ THEYWERETOELIMINATEANGLOAMERICANTENSIONBYABROGATING THEANGLOJAPANESEALLIANCECOMMATOAGREEUPONAFAVORABLENAVAL RATIOVISAVISJAPANCOMMAANDTOHAVETHEJAPANESEOFFICIALLY ACCEPTACONTINUATIONOFTHEOPENDOORPOLICYINCHINAZDOTZ STOP THEBRITISHCOMMAHOWEVERCOMMATOOKAMORECAUTIOUSANDTEMPEREDAPPROACHZDOTZ INDEEDCOMMATHEBRITISHOFFICIALSBROUGHTCERTAINGENERALDESIRES TOTHECONFERENCECOLONTOACHIEVEPEACEANDSTABILITYINTHEWEST PACIFICSEMICOLONAVOIDANAVALARMSRACEWITHTHEUNITEDSTATESSEMICOLONTHWART JAPANESEENCROACHMENTINTOAREASUNDERTHEIRINFLUENCESEMICOLONAND PRESERVETHESECURITYOFSINGAPORECOMMAHONGKONGCOMMAANDDOMINION COUNTRIESCOMMABUTTHEYDIDNOTENTERTHECONFERENCEWITHA SPECIFICLAUNDRYLISTOFDEMANDSZDOTZRATHERCOMMATHEYBROUGHTWITH THEMAVAGUEVISIONOFWHATTHEWESTPACIFICSHOULDLOOKLIKE AFTERANAGREEMENTZDOTZ STOP JAPANESEOFFICIALSWEREMOREFOCUSEDONSPECIFICSTHANTHEBRITISHCOMMA ANDTHEYAPPROACHEDTHECONFERENCEWITHTWOPRIMARYGOALSCOLON TOSIGNANAVALTREATYWITHBRITAINANDTHEUNITEDSTATES ANDTOOBTAINOFFICIALRECOGNITIONOFJAPANSSPECIAL INTERESTSINMANCHURIAANDMONGOLIAZDOTZJAPANESEOFFICIALSALSO BROUGHTOTHERISSUESTOTHECONFERENCECOLONASTRONGDEMANDTO REMAININCONTROLOFYAPCOMMASIBERIACOMMAANDTSINGTAOASWELLAS MOREGENERALCONCERNSABOUTTHEGROWINGPRESENCEOFAMERICAN FLEETSINTHEPACIFICZDOTZ STOP THEAMERICANHANDWASSTRENGTHENEDBYTHEINTERCEPTIONAND DECRYPTIONOFSECRETINSTRUCTIONSFROMTHEJAPANESEGOVERNMENT TOITSDELEGATIONZDOTZTHEMESSAGEREVEALEDTHELOWESTNAVAL RATIOTHATWOULDBEACCEPTABLETOTOKYOSEMICOLONUSNEGOTIATORS USEDTHATKNOWLEDGETOPUSHTHEJAPANESEZDOTZTHISSUCCESSCOMMA ONEOFTHEFIRSTINTHEUSGOVERNMENTSBUDDINGEAVESDROPPING ANDCRYPTOLOGYEFFORTSCOMMALEDEVENTUALLYTOTHEGROWTHOF SUCHAGENCIESZDOTZ STOP THEHEADOFTHEJAPANESEDELEGATIONTOTHEWASHINGTONNAVAL CONFERENCEWASPRINCEIYESATOTOKUGAWACOMMAWHODURINGTHEFIRST FOURDECADESOFTHETWENTIETHCENTURYLEDAPOLITICALMOVEMENT INJAPANTHATPROMOTEDDEMOCRACYANDINTERNATIONALGOODWILL WITHTHEUSCOMMAEUROPEANDASIAZDOTZHISINFLUENCEWASSIGNIFICANT INTHENEGOTIATIONSANDRATIFICATIONOFTHEWASHINGTONNAVALTREATYZDOTZ STOP USPRESIDENTWARRENHARDINGCALLEDTHEWASHINGTONCONFERENCEADEAL THATALLCOUNTRIESTHOUGHTBESTFORTHEMSELVESZDOTZTORESOLVE TECHNICALDISPUTESABOUTTHEQUALITYOFWARSHIPSCOMMATHECONFEREES ADOPTEDASTANDARDBASEDONTHETONNAGEDISPLACEMENTCOMMAASIMPLE MEASUREOFTHESIZEOFASHIPZDOTZATENYEARAGREEMENTFIXEDTHE RATIOOFBATTLESHIPSATFIVECOLONFIVECOLONTHREECOLONFIVEHUNDREDTWENTY FIVETHOUSANDTONSFORTHEUSCOMMAFIVEHUNDREDTWENTYFIVETHOUSAND TONSFORBRITAINCOMMAANDTHREEHUNDREDFIFTEENTHOUSANDTONSFOR JAPANZDOTZSMALLERLIMITSWITHARATIOOFONEDOTSIXSEVERAPPLIED TOFRANCEANDITALYZDOTZBATTLESHIPSCOMMATHEDOMINANTWEAPONSSYSTEMS OFTHEERACOMMACOULDBENOLARGERTHANTHIRTYFIVETHOUSANDTONSZDOTZ THEMAJORPOWERSALLOWEDTHEMSELVESONEHUNDREDTHIRTYFIVE THOUSANDCOLONONEHUNDREDTHRITYFIVETHOUSANDCOLONEIGHTYONETHOUSAND TONSFORTHENEWLYDEVELOPEDAIRCRAFTCARRIERSZDOTZ STOP WHILETHEADMIRALSWEREUNHAPPYCOMMAPEACEACTIVISTSSTRONGLY SUPPORTEDTHERESULTSANDSUCCESSFULLYWORKEDFORRATIFICATIONZDOTZ INTHEUNITEDSTATESTHEYINCLUDEDTHEWORLDPEACEFOUNDATIONSEMICOLON THEAMERICANASSOCIATIONFORINTERNATIONALCONCILIATIONSEMICOLON THECARNEGIEENDOWMENTFORINTERNATIONALPEACESEMICOLONTHEWOMENSPEACE SOCIETYSEMICOLONTHEWOMENSWORLDDISARMAMENTCOMMITTEESEMICOLONTHEWOMENS INTERNATIONALLEAGUEFORPEACEANDFREEDOMCOMMAANDTHEFEDERAL COUNCILOFCHURCHESOFCHRISTINAMERICAZDOTZ STOP THEWASHINGTONCONFERENCEEXACTLYCAPTUREDTHEWORLDWIDEPOPULAR DEMANDFORPEACEANDDISARMAMENTZDOTZWITHOUTANAGREEMENTCOMMATHEUSCOMMA BRITAINANDJAPANWOULDHAVEENGAGEDINANEXPENSIVEBUILDUPCOMMA WITHEACHFEARINGTHEOTHERTWOGETTINGTOOPOWERFULZDOTZHOWEVERCOMMA EVENWITHTHERESTRICTIONSCOMMATHEAGREEMENTSOLIDIFIEDJAPANS POSITIONASAGREATPOWERANDWASTREATEDASACOLONIALPOWER WITHEQUALDIPLOMATICINTERESTSCOMMAAFIRSTFORANONDASHWESTERNNATIONZDOTZ STOP THENAVALTREATYWASCONCLUDEDONFEBRUARYSIXTHCOMMAONENINETWOTWOZDOTZ RATIFICATIONSOFTHETREATYWEREEXCHANGEDINWASHINGTONON AUGUSTSEVENTEENTHCOMMAONENINETWOTHREECOMMAANDITWASREGISTEREDIN LEAGUEOFNATIONSTREATYSERIESONAPRILSIXTEENTHCOMMAONENINETWOFOURZDOTZ STOP JAPANAGREEDTOREVERTSHANDONGTOCHINESECONTROLBYAN AGREEMENTCONCLUDEDONFEBRUARYFOURTHCOMMAONENINETWOTWOZDOTZ RATIFICATIONSOFTHEAGREEMENTWEREEXCHANGEDINBEIJINGONJUNE SECONDCOMMAONENINETWOTWOCOMMAANDITWASREGISTEREDINLEAGUEOFNATIONS TREATYSERIESONJULYSEVENTHCOMMAONENINETWOTWOZDOTZ STOP STOP WASHINGTONNAVALTREATYLEDTOANEFFECTIVEENDTOBUILDINGNEW BATTLESHIPFLEETSCOMMAANDTHEFEWSHIPSTHATWEREBUILTWERELIMITED INSIZEANDARMAMENTZDOTZMANYEXISTINGCAPITALSHIPSWERESCRAPPED ORSUNKZDOTZSOMESHIPSUNDERCONSTRUCTIONWERETURNEDINTOAIRCRAFT CARRIERSINSTEADZDOTZ STOP EVENWITHTHETREATYCOMMATHEMAJORNAVIESREMAINEDSUSPICIOUSOF ONEANOTHERANDBRIEFLYENGAGEDINARACETOBUILDHEAVYCRUISERSCOMMA WHICHHADBEENLIMITEDINSIZEPARENTENTHOUSANDTONSPARENBUTNOTNUMBERSZDOTZ THATOVERSIGHTWASRESOLVEDONVALUEOFCRUISERSBYTHELONDON NAVALTREATYOFONENIVETHREEZEROCOMMAWHICHSPECIFIEDATENCOLONTENCOLONSEVEN RATIOFORCRUISERSANDDESTROYERSZDOTZFORTHEFIRSTTIMECOMMASUBMARINES WEREALSOLIMITEDCOMMAWITHJAPANGIVENPARITYWITHTHEUSANDBRITAINCOMMA ATFIFTYTHREETHOUSANDTONSEACHZDOTZPARENSUBMARINESTYPICALLYDISPLACED PARENONETHOUSANDTOTWOTHOUSANDTONSEACHZDOTZPARENTHEUSNAVYMAINTAINED ANACTIVEBUILDINGPROGRAMTHATREPLACEDOBSOLESCENTWARSHIPS WITHTECHNICALLYMORESOPHISTICATEDNEWMODELSINPARTBECAUSE ITSCONSTRUCTIONYARDSWEREIMPORTANTSOURCESOFPOLITICAL PATRONAGEANDSOWEREWELLPROTECTEDBYCONGRESSZDOTZDURINGTHENEW DEALCOMMARELIEFFUNDSWEREUSEDTOBUILDMOREWARSHIPSZDOTZQUOTETHE NAVALPROGRAMWASWHOLLYMINECOMMAQUOTEPRESIDENTFRANKLINROOSEVELT BOASTEDZDOTZ STOP THEPACTSANDTHETREATIESTHATRESULTEDFROMTHEWASHINGTONNAVAL TREATYREMAINEDINEFFECTFORFOURTEENYEARSZDOTZJAPANENDED PARTICIPATIONINONENINETHREESIXZDOTZ STOP C:\H5_TOOLS> python hebern5_tui.py -E ZZAAAZO ^ < MSGS\conf_naval.pln | ^ python groupe.py > MSGS\conf_naval.cry C:\H5_TOOLS> more MSGS\conf_naval.cry VSEPU EGHUY KELQX IRRYQ BDBDL UUQXD BWFKA ZUXLD TWWSK OIXZL ETDXW OKMYI BBBLP CEPQB CZIEK NSMLA CGFFL PCWOQ ZGUSH UEXXG QWHGB MPZDV ZUNXM HSXNT MEPWN XKREO TJDVZ XEFIL LWMFP OGLRX ... We remove the Lampboard permutation actionFriedman does not do it, but personally I consider that the reasoning is simpler by performing this step.C:\H5_TOOLS> python striplamp.py TYOEUMXDFJQVKWBNSHCILRZAGP ^ MSGS\conf_naval.cry > MSGS\conf_naval.stripped LQDZEDYREBMDUKGTVVBKOHOHUEEKGHONIMXWEGUHANNQMCTGWUDAH... We calculate the statistics for different intervalsWe start with an interval of index 4, i.e. those corresponding to two letters separated by three letters.C:\H5_TOOLS> python fried_new.py -I 4 < MSGS\conf_naval.stripped 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: 11 13 13 8 12 11 15 11 8 15 13 9 16 8 14 6 25 13 8 19 20 9 14 13 8 11 B: 7 15 14 21 17 10 11 15 9 10 14 14 9 12 10 6 10 6 10 9 14 11 13 15 9 25 C: 12 16 10 12 15 13 16 10 16 10 8 10 9 12 9 13 14 16 9 10 15 14 18 26 13 8 D: 11 10 12 12 17 13 8 14 11 16 14 10 8 12 12 18 9 10 17 12 10 22 16 13 13 7 E: 10 11 9 18 12 15 16 13 9 14 26 13 10 14 7 7 17 11 10 11 15 17 10 9 8 11 F: 16 12 11 15 14 12 17 12 17 14 14 8 12 11 8 6 8 8 22 12 10 14 13 16 14 11 G: 16 11 11 8 6 17 12 12 14 17 16 17 23 13 9 11 11 10 15 7 12 12 12 7 10 7 H: 11 18 12 12 10 12 12 3 22 7 14 11 16 9 10 12 8 10 6 12 14 9 13 19 12 11 I: 11 7 11 8 12 12 15 10 3 15 12 17 11 11 12 12 11 18 7 15 13 9 24 10 9 10 J: 17 14 14 17 8 10 14 9 6 20 10 14 11 10 13 17 12 17 10 12 11 7 17 8 12 13 K: 9 11 15 11 14 10 11 11 12 11 15 10 12 13 8 16 13 6 17 10 14 7 20 12 24 22 L: 12 15 10 8 10 14 7 6 20 13 11 17 14 13 11 7 8 22 18 10 10 10 20 12 10 9 M: 12 9 21 14 10 7 11 20 15 11 8 12 10 10 6 9 9 8 9 8 22 12 14 9 7 4 N: 11 13 18 20 11 19 7 9 12 12 11 16 12 16 14 7 8 10 11 33 7 15 12 13 15 15 O: 12 7 10 12 7 15 11 13 19 7 5 7 4 29 9 8 12 6 10 12 15 9 11 10 15 12 P: 6 14 15 9 7 13 5 10 7 12 10 8 14 13 15 7 6 7 12 13 13 10 9 7 7 15 Q: 13 14 11 10 11 7 12 11 7 9 10 19 11 12 14 8 4 7 14 16 12 16 10 9 8 14 R: 11 7 14 10 11 15 4 25 9 7 8 13 6 20 11 10 6 9 10 14 9 5 11 19 12 14 S: 12 6 17 15 16 12 12 8 5 13 13 10 11 13 13 10 18 11 16 19 14 11 5 11 9 15 T: 20 12 10 18 25 13 13 9 13 11 15 7 12 19 12 11 10 11 11 12 16 9 13 13 14 6 U: 18 24 9 11 12 14 14 7 15 10 21 15 4 16 19 13 11 12 11 11 17 19 10 16 10 9 V: 9 10 26 15 13 10 11 7 11 9 8 17 9 13 11 11 12 11 18 13 17 15 9 12 12 18 W: 7 14 11 14 14 12 25 21 12 12 16 15 12 15 13 13 14 18 7 10 13 17 8 13 1 11 X: 13 10 12 14 15 14 15 10 12 10 18 8 14 10 6 8 15 10 11 14 13 14 9 6 22 11 Y: 21 8 9 8 12 12 12 13 13 14 14 11 9 9 12 11 4 12 13 10 12 18 10 8 7 7 Z: 15 15 10 7 12 15 9 17 8 24 9 10 8 14 9 7 14 11 13 11 9 16 16 9 8 19 323316335327323327315306305323333318287347287264289290315335347327337315289315 Results analysisNote: Due to the high number of data and the fact that we only take the data which give intervals being well above the average, the results are almost certain (in fact we will still have errors). In Friedman's case, his analysis was much more difficult (see his report for details). The intervals and their frequencies are given in the following table. B...? BU(24), BH(18) C...? CV(26), CM(21) E...? ET(25), EB(17), ED(17) G...? GW(25), GF(17) H...? HR(25), HW(21), HM(20) J...? JZ(24), JJ(20), JD(16) K...? KE(26), KU(21) M...? MG(23), MH(16) N...? NO(29), NT(19) R...? RL(22), RV(16) S...? SF(22), SL(18), SV(18) T...? TN(33), TA(19) W...? WI(24), WL(20), WM(20) X...? XC(26), XH(19) Y...? YK(24), YX(22), YT(14) Z...? ZB(25), ZK(22), ZZ(19)By bringing together the deductions we obtain the following sequences: B...U, X...C...V, Y...K...E...T...N...O, M...G...W...I, H...R...L, J...Z, Z...B,We need more information. We will take a look at some statistics with index intervals 3, 5 and 6: C:\H5_TOOLS> python fried_new.py -I 3 < MSGS\conf_naval.stripped 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: 15 13 9 8 12 14 11 13 10 8 20 15 11 16 11 6 19 7 13 10 15 19 11 10 12 15 B: 15 17 14 10 12 13 7 8 19 14 20 11 11 14 13 20 7 9 11 16 19 6 11 3 8 8 C: 22 7 15 12 8 12 16 10 12 16 13 11 11 13 7 9 13 17 7 20 21 16 12 9 16 9 D: 11 10 10 15 14 15 11 19 15 20 8 12 10 11 15 13 9 3 14 9 20 14 10 11 7 21 E: 14 14 13 7 6 11 11 8 16 10 13 8 16 14 12 10 12 14 12 13 23 8 13 23 9 13 F: 17 10 9 10 11 12 16 15 10 11 13 22 8 16 8 9 12 11 11 16 13 12 21 10 8 16 G: 16 11 9 18 20 16 14 11 13 14 12 13 12 9 5 10 8 12 13 3 11 12 16 11 16 11 H: 9 8 18 10 14 10 12 8 11 15 14 7 14 13 15 5 9 7 9 15 11 21 10 18 7 15 I: 7 10 24 7 13 14 12 6 7 14 11 16 13 14 9 16 10 14 7 10 16 9 11 10 15 10 J: 7 13 12 14 11 12 16 12 10 10 22 16 10 16 12 12 8 13 12 11 10 9 8 20 18 9 K: 13 22 15 12 13 14 14 15 10 12 16 11 9 13 12 9 12 12 14 17 10 13 12 15 9 10 L: 11 18 12 6 16 11 13 13 13 9 13 12 9 17 16 9 10 9 11 13 14 12 10 14 14 12 M: 7 8 10 13 10 21 15 6 9 12 5 13 7 12 4 13 8 7 18 18 11 12 17 12 7 12 N: 14 13 12 14 13 12 19 17 7 12 11 14 11 15 10 12 13 10 17 12 15 20 14 11 18 11 O: 10 11 16 14 8 11 11 5 10 5 6 14 12 12 15 13 9 13 10 11 15 10 14 13 7 12 P: 8 9 10 12 8 15 11 11 11 9 10 8 9 8 9 9 5 19 9 8 10 14 18 7 6 11 Q: 13 15 13 8 12 10 9 15 18 14 6 15 9 14 13 11 11 7 12 8 8 12 10 11 8 7 R: 15 8 11 15 13 12 15 11 6 9 10 12 11 16 10 9 10 11 16 7 10 10 12 9 15 7 S: 12 13 9 12 19 14 7 13 9 9 15 13 10 9 7 5 10 19 13 12 15 12 13 13 12 20 T: 10 12 15 16 12 10 9 11 15 18 15 12 11 14 12 12 14 13 11 18 15 13 13 10 9 15 U: 11 14 9 28 13 18 13 15 10 12 16 13 10 21 13 5 13 11 13 17 12 10 12 16 11 12 V: 8 13 14 12 18 10 9 14 16 14 8 13 15 16 14 13 9 14 9 19 10 15 13 7 13 11 W: 13 11 19 13 15 12 7 10 9 16 19 8 11 10 11 11 13 7 9 16 17 16 18 18 15 14 X: 11 15 14 10 14 9 9 22 14 10 10 8 9 11 11 5 28 7 13 14 11 11 13 13 13 10 Y: 20 8 9 15 9 12 14 6 15 13 15 7 16 10 9 10 9 9 9 12 8 9 9 14 6 16 Z: 14 13 14 16 9 7 14 12 10 17 12 14 12 13 14 8 8 15 22 10 8 12 16 7 10 8 323316335327323327315306305323333318287347287264289290315335348327337315289315 C:\H5_TOOLS> python fried_new.py -I 5 < MSGS\conf_naval.stripped 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: 9 16 10 8 13 28 9 11 20 11 6 13 9 14 11 9 10 7 9 11 19 13 17 16 14 10 B: 13 11 9 13 10 10 21 9 6 17 19 10 11 13 12 11 8 9 15 14 9 17 23 10 7 9 C: 17 7 11 14 9 13 19 9 10 11 11 24 11 13 7 9 12 16 18 14 17 12 15 9 11 15 D: 12 11 7 8 11 17 8 17 14 14 10 13 12 18 15 14 13 14 11 9 8 15 12 13 11 20 E: 9 23 9 13 13 10 10 11 14 13 16 15 12 14 11 9 11 19 16 13 16 6 12 8 9 11 F: 5 9 20 6 10 15 8 10 15 11 10 12 14 16 12 14 11 10 17 11 21 12 14 17 13 14 G: 10 11 12 16 24 6 12 15 9 17 11 8 13 13 14 9 12 7 14 14 12 16 14 8 6 13 H: 10 8 12 8 9 9 13 12 11 13 16 13 16 19 12 7 9 12 5 14 15 17 9 12 16 8 I: 11 7 11 23 12 18 11 8 14 16 9 6 9 14 7 6 16 12 6 10 12 19 16 10 12 10 J: 13 11 10 13 16 13 15 16 13 4 13 6 8 17 18 17 11 8 14 12 13 12 13 14 11 12 K: 11 17 10 10 15 12 15 25 15 10 20 18 13 15 9 12 7 12 9 8 12 13 12 14 5 15 L: 16 14 13 22 9 9 10 16 15 16 9 13 12 10 8 14 11 11 14 14 10 13 4 12 9 13 M: 11 12 12 8 6 8 10 11 12 13 21 6 7 14 18 7 6 6 14 10 13 10 19 8 13 12 N: 18 17 13 16 8 13 12 10 15 13 22 12 6 13 10 6 23 13 11 13 16 15 12 15 14 11 O: 25 14 15 7 7 15 11 11 13 10 8 8 6 15 9 10 8 6 13 9 12 13 11 9 17 5 P: 12 7 12 11 14 13 8 13 9 12 11 11 11 11 7 7 10 4 8 15 7 3 13 12 11 12 Q: 13 4 6 10 12 14 10 9 10 12 14 14 5 12 14 10 8 7 21 13 12 8 13 13 11 13 R: 12 14 12 17 15 4 17 8 8 12 11 6 16 11 7 15 9 17 12 9 12 7 5 8 12 14 S: 16 23 12 10 9 14 8 9 12 16 9 15 7 11 14 6 11 17 10 15 17 14 11 11 6 12 T: 14 8 18 16 16 14 12 14 9 14 10 18 10 14 10 9 7 17 12 11 9 10 12 16 12 23 U: 11 10 10 16 22 19 14 14 9 13 9 16 15 10 12 8 9 7 19 16 15 16 14 14 24 6 V: 7 11 17 11 15 13 13 9 15 11 16 11 18 13 11 11 13 10 10 11 11 17 22 12 11 8 W: 11 13 20 11 15 14 10 10 10 11 11 15 14 10 10 16 18 14 7 25 15 13 14 11 7 13 X: 10 13 16 10 10 9 9 11 8 13 13 11 16 16 8 12 11 14 12 18 15 14 14 6 10 15 Y: 9 12 11 11 13 8 15 10 14 11 14 10 7 8 11 9 11 15 6 13 17 10 4 19 10 11 Z: 18 13 27 19 10 9 15 8 5 9 14 14 9 13 10 7 13 6 12 13 12 12 12 18 7 10 323316335327323327315306305323333318287347287264288290315335347327337315289315 C:\H5_TOOLS> python fried_new.py -I 6 < MSGS\conf_naval.stripped 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: 10 15 13 11 8 13 14 8 12 13 17 18 16 14 12 10 10 8 15 12 10 19 11 15 10 9 B: 16 15 12 9 10 20 12 18 15 9 14 16 6 12 16 7 12 11 5 9 11 11 13 14 12 11 C: 5 9 20 16 17 14 12 8 9 14 7 12 10 20 14 9 10 12 17 19 15 11 16 18 11 9 D: 14 11 17 15 15 8 10 6 11 13 9 13 9 16 14 12 8 8 11 15 19 17 17 10 11 18 E: 16 10 11 18 11 6 11 10 11 15 9 17 13 11 8 13 13 9 18 14 10 17 16 7 20 9 F: 17 10 12 13 8 11 12 7 13 11 31 10 11 17 12 11 17 6 9 10 10 13 12 13 13 18 G: 10 11 10 15 14 6 8 10 14 9 14 12 5 11 13 8 13 14 11 17 13 16 11 16 18 17 H: 10 6 12 13 20 8 8 10 11 21 6 14 12 10 12 14 13 11 12 11 12 14 8 9 15 13 I: 15 11 9 6 4 17 8 8 4 14 18 11 14 16 13 16 13 10 10 11 26 8 11 10 10 12 J: 11 10 13 8 14 11 25 13 13 11 9 9 17 15 15 7 10 9 13 15 17 15 15 11 6 11 K: 19 15 16 12 10 9 11 11 12 13 11 14 10 14 5 21 13 16 14 15 12 15 15 11 7 13 L: 10 18 17 14 12 8 22 18 9 7 15 6 12 13 14 10 12 12 13 9 17 11 13 9 9 7 M: 9 8 10 15 12 13 11 11 7 13 8 11 14 14 6 7 11 10 10 10 10 9 17 20 11 10 N: 9 12 8 21 10 22 15 17 15 20 19 15 10 5 13 3 22 10 11 15 13 19 12 10 8 13 O: 13 14 11 9 17 9 11 7 12 13 12 10 5 14 7 10 11 8 8 15 13 5 14 18 13 8 P: 11 9 18 7 8 10 13 12 11 10 12 10 10 14 4 8 8 5 11 12 11 9 14 11 9 7 Q: 13 15 17 8 7 15 8 14 16 7 9 19 10 14 8 7 7 6 6 10 17 12 10 15 6 12 R: 17 12 13 17 12 14 14 9 12 8 16 8 7 12 10 10 5 7 13 12 16 8 10 6 11 11 S: 6 17 11 16 9 12 12 13 9 14 15 10 8 17 11 13 16 18 7 12 11 8 13 11 15 11 T: 14 9 9 15 15 14 10 13 8 16 10 13 16 12 12 13 12 14 20 14 17 15 11 15 7 11 U: 16 12 16 11 9 16 8 23 12 12 12 12 14 12 10 17 11 16 18 16 11 10 11 14 16 12 V: 9 14 7 7 17 14 9 18 13 15 14 9 10 28 10 13 8 12 10 12 16 12 15 8 12 15 W: 16 12 18 15 11 14 12 11 16 16 12 16 15 9 9 3 12 24 14 16 8 12 8 15 8 16 X: 11 19 12 13 24 14 15 6 16 9 12 9 13 10 11 7 7 13 7 8 12 12 15 11 15 13 Y: 12 12 10 13 14 14 12 12 15 7 12 10 10 8 19 7 7 13 14 15 11 8 10 7 7 10 Z: 14 10 13 10 15 15 12 13 9 13 10 14 10 9 9 8 7 8 18 11 9 21 19 10 9 19 323316335327323327315306305323333318287347287264288290315335347327337314289315We can deduce (with a very small margin of error) the following intervals: C..I, D..U, L..F, Q..X, Y....U, T....W, H.....UWith all this data, we are finally able to reconstruct the rotor wiring in position V: J . . . Z . . . B . . . U J . . . Z . H Y B . R . U . L . . F J O . . Z . H Y B . R K U . L E . F . T . . . N W . J O I . Z . H Y B . R K U . L E M F . T G . . N W . J O I . Z . H Y B D R K U . L E M F . T G . . N W C J O I V Z P H Y B D R K U S L E M F Q T G X A N W C A few commentsThe wiring found is offsetIf we compare the wiring found to the wiring used to create the cryptogram, we can see that its defining sequence is shifted:Genuine rotor: 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 Rotor found : J O I V Z P H Y B D R K U S L E M F Q T G X A N W CActually, it doesn't matter. This can be seen using two wirings for the rotor V and note that the decipherments provide isomorphic messages. Here is an example where the same ciphertext is decrypted with two offset sequences for rotor 5. As we ignore the wiring of the other rotors, we use the identity permutation to each. C:\H5_TOOLS> more ROTORS\0.rot ABCDEFGHIJKLMNOPQRSTUVWXYZ C:\H5_TOOLS> more ROTORS\5.rot FQTGXANWCJOIVZPHYBDRKUSLEM C:\H5_TOOLS> more ROTORS\5_shift_3.rot GXANWCJOIVZPHYBDRKUSLEMFQT C:\H5_TOOLS> echo PRESIDENTOFTHEUNITEDSTATESI | ^ python hebern5_tui.py -E ZZAAAZN -I 1:2:3:4:5 ^ VNOHFUWGXGFBZZSWCTACYSENKOT C:\H5_TOOLS> echo VNOHFUWGXGFBZZSWCTACYSENKOT | ^ python hebern5_tui.py -E ZZAAAZN -I 0:0:0:0:5 -d ABJEWZJUXKMXFJCUWXJZEXQXJET C:\>H5_TOOLS> echo VNOHFUWGXGFBZZSWCTACYSENKOT | ^ python hebern5_tui.py -E ZZAAAZN -I 0:0:0:0:5_shift_3 -d PAULESUYFRGFJUDYEFUSLFOFULXLet's compare the two decryptions: 1) A B J E W Z J U X K M X F J C U W X J Z E X Q X J E 2) P A U L E S U Y F R G F J U D Y E F U S L F O F U L Plain p r e s i d e n t o f t h e u n i t e d s t a t e s e . . e . . . e . . . . . . e . . . . e . . . . . e . t . . . . . . . . t . . t . . . . . t . . . t . t . . s . . . s . . . . . . . . . . . . . . . . s . . . . sWe can see that we have many isomorphic decipherments: Thus, the plain letter "E" is encrypted by "J" with the rotor 5 and it is encrypted by the letter "U" if we use the rotor 5 offset by three positions. Web Links
|