项目作者: rafael-santiago

项目描述 :
A simple cryptanalysis tool for the Vigenere cipher.
高级语言: C
项目地址: git://github.com/rafael-santiago/vigcrack.git
创建时间: 2016-09-24T14:55:04Z
项目社区:https://github.com/rafael-santiago/vigcrack

开源协议:GNU General Public License v2.0

下载


vigcrack

An old trinket from 2005/2003.

WARNING: It is just a “cryptotoy” (just for fun) do not use it to protect your sensible data.

Vigcrack is a cryptanalysis tool which can help on crack Vigenère ciphertexts. This tool is not strictly based on
Babbage's/Kasiski's approach. In fact, here is not performed frequency analysis. Here what we get is a more brainy
Hangman which does not hang any innocent stick figure…

I have developed this tool during my first reading of The Code Book from Simon Singh. Here you got a “reissue” from
this crypto-tool.

How to clone this repo?

This repo has some submodules, so after clonning it you need to initialize them. For doing it use the following way:

  1. babbage@DiffEngine:~/src/vigcrack# git submodule update --init

How to build it?

For building this software you need to use Hefesto. After following the
steps to get Hefesto installed on your system, you should move to the vigcrack’s src sub-directory and call hefesto:

  1. babbage@DiffEngine:~/src/vigcrack# cd src
  2. babbage@DiffEngine:~/src/vigcrack/src# hefesto

After invoking the hefesto command you should get the Vigcrack binary inside the sub-directory bin.

Can I install it?

Yes, for installing:

  1. babbage@DiffEngine:~/src/vigcrack# hefesto --install

For uninstalling:

  1. babbage@DiffEngine:~/src/vigcrack# hefesto --uninstall

How to use it?

The Vigcrack is a software which introduces several operation modes. All of them related with the
cryptanalysis of the Vigenère cipher.

In order to introduce you these operation modes I will use the basic workflow which is based on the necessity of
cracking some encrypted data. So, let’s use our good and old “crypto-actors”: Alice, Bob and Eve.
Spoiler: today Eve will win! Come on, I think that she deserves, look.

Let’s suppose that Bob sent to Alice the following message:

  1. YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGAR
  2. VJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTM
  3. EYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTM
  4. OFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPH
  5. BNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWL
  6. IPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUT
  7. GNL

The Sybil

Eve is a “Network geek” so she has been listened the Alice/Bob’s wire intercepting the previous data. Eve knows that
Alice and Bob are pretty naive. So after trying to crack the cryptogram using simple substitutions without success, she
start assuming the Vigenère cipher usage (due to the frequency distribution). By the way, Eve has installed a nice
software (…) The first thing that our sympathetic attacker did with
this tool was query a smart Sybil:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --sybil \
  2. > --file-path=alice-bob-crap.txt --min-pattern-len=3 --max-pattern-len=3

The Vigcrack's sybil returned the following supressed content to Eve:

  1. INFO: 711 bytes loaded from alice-bob-crap.txt.
  2. YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQF
  3. SQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMI
  4. FCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHO
  5. VUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXG
  6. RAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAV
  7. LZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  8. INFO: Now guessing the key length... please wait...
  9. *** Found patterns [nearest - farthest]:
  10. The pattern GCI was found 9 letters far from another GCI
  11. The pattern RRQ was found 9 letters far from another RRQ
  12. The pattern RQT was found 9 letters far from another RQT
  13. The pattern QTM was found 9 letters far from another QTM
  14. The pattern TMO was found 9 letters far from another TMO
  15. The pattern MOF was found 9 letters far from another MOF
  16. The pattern FCC was found 18 letters far from another FCC
  17. The pattern CCP was found 18 letters far from another CCP
  18. The pattern OPA was found 18 letters far from another OPA
  19. The pattern LZA was found 18 letters far from another LZA
  20. The pattern NFG was found 22 letters far from another NFG
  21. The pattern UPU was found 27 letters far from another UPU
  22. The pattern XHC was found 27 letters far from another XHC
  23. (...)
  24. The pattern LPH was found 495 letters far from another LPH
  25. The pattern VAS was found 513 letters far from another VAS
  26. The pattern LPH was found 522 letters far from another LPH
  27. The pattern PHJ was found 522 letters far from another PHJ
  28. The pattern GNV was found 560 letters far from another GNV
  29. *** Probable key lengths [most - least]: 3, 9, 2, 6, 18, 4, 5, 11, 12, 15, 8, 19, 7, 10, 13, 16, 20, 14.

Why Eve ran the previous command? Why that pattern lengths?

Well, the Vigcrack's sybil can predict the length of the keyword just verifying some characteristics onto the cryptogram.
Its Sybil tell us at the end of the analysis report the most probable keyword lengths (sorted by relevance). The reason for
using the options --min-pattern-len=3 and --max-pattern-len=3 is because Eve is smart. The keyword guessing is
done by found patterns along the cryptogram. Eve supposed that the plaintext was in English and she knows that
trigrams are pretty common in a English text. Things like THE, AND, SHE, HIS, HER, etc (no, etc not so).

At the end of the report the Sybil has shown to Eve that there is a strong possibility of a 3-letter
keyword usage.

Now, Eve started playing a Geek Hangman ;) For doing it she used another suggestive application mode called
hangman.

The Hangman

She picked the first trigram reported (GCI) and made an assumption about it represent a THE when decrypted. So
translating it into commands would be:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=GCI\
  2. > --plaintext=THE --key-len=3 --file-path=alice-bob-crap.txt --max-attempts=30

Now explaining the Eve’s intentions. Eve is assuming GCI -> THE and also assuming that a keyword of length 3 was used.
The --file-path indicates the cryptogram’s path and the option --max-attempts=30 will only decrypt the first
30 letters from the file. This command spitted the following report to Eve:

  1. *** The keyword was completely re-used 102 times before.
  2. The keyword's letter at position #1 was used to encrypt it.
  3. The effective keyword to encrypt the pattern was 'NVE'.
  4. *** Decrypt attempts assuming that 'GCI' leads to 'THE'...
  5. K C P
  6. __________________
  7. N Y l
  8. V L q
  9. E P l
  10. N H u
  11. V J o
  12. E V r
  13. N G t
  14. V I n
  15. E O k
  16. N V i
  17. V H m
  18. E W s
  19. N A n
  20. V D i
  21. E R n
  22. N G t
  23. V V a
  24. E I e
  25. N E r
  26. V H m
  27. E R n
  28. N J w
  29. V P u
  30. E T p
  31. N U h
  32. V C h
  33. E Y u
  34. N D q
  35. V S x
  36. E E a
  37. __________________

The Hangman is interactive and you can get lots of fun when you start making right assumptions.

However, Eve have seen that her guessing did not produced a legible output. So, she returned to the pattern listing and
started trying other ones. After several attempts she have decided to use another application mode called brutus.

The Brutus

Well, in fact the brutus mode does what the hangman does but automated. Then, Eve have emitted the following
command into her terminal:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --brutus --file-path=alice-bob-crap.txt\
  2. > --plaintexts=the,and,ing,ent,ion,nth,ter,int,oft,tha,ere,tio,her,fth,eth,ati,hat,ate,sth,est\
  3. > --key-len=3 > report.txt

With this command brutus tries to decipher any found pattern to the informed plaintexts assuming the passed key length.
The informed plaintexts in this command sample are the most common trigrams present in English texts.

Eve got the following data into report.txt file:

  1. *** Assuming GCI -> THE (keyword = "NFW")
  2. K = NFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFWNFW
  3. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  4. P = lgtueztdsicanyvtqmrcvwkxhxcqnivaqdaigpuxribbrivwpeztfxpyihusjsivqbbkqtqlxporqrsbvhviwzldihxvqwpmvexaakjhpdkgdoujjhabeeqnowmiehdawdzsjyxrwbhkyxkmywacyyivsjqccslpqikgzhkyslhdpbcapaxrnqvnslpqikgzhkyslhdpbcapaxrnqvnhsdhjdtznbptzxxqvbernlyghilagpkmcglnrsifscvqvagpkxttibasjqscvpnysgkignwlgisfrnqcansdjmcgdnnftimtxmcdibfrtxmawwhrqtubdyoxkftnqnbxwbvtkajhmtmvdoqbamhmvdoqbaecbcthwawrtvilgdncsipsbgbqervqsggdnwpclscgkjjoclawqerpjtbphypjpikbvnqcmkhdkxigtuwrnlrtypjpikbvnqcmkhdkxigtuwrnlrtypjpikbvnqcmkhdkxigtuwrnlrtypjpikbvnqcmkhdkxigtuexwfrzawdwpgbesaswkawlauczrzkdksivwbwcnlyzpwfpltxvikawpkdkixobjgmcdqnuwwcxdqltizjrileeigdnncdrhdfwwpxtipppgxjileeigdnncdrhdfwwpxtipppgxjileeigdnncdrhdfwwpxtipppgxjileeigdnncdrhdfwwpxtip
  5. *** Assuming RRQ -> THE (keyword = "OCQ")
  6. K = OCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQOCQ
  7. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  8. P = kjzthfsgyhfgmbbstsqfbvndgaipqoudwcdofsawuoaexhycohfsidobogxyivouthanwstrwsuqtxrebgyovcrclnwywvssuhdzdqikvcnmcraimnzekdttnzshhncdcccyibdqzhgnewnsxzgbbehyyitibvrotojjfgneroncshbdvzaxmtbmvrotojjfgneroncshbdvzaxmtbmkyckpcwfmevscdwtbahxmoefkokdmonsbjrmuyhiybywudmondswoadyitybyvmbyfnofqckjorixmtizqycmsbjjmqlslssasbgoaixsaszzcguwsxhcbuwnlsqwmedvebsngiksspbcrwadsgpbcrwadkbeiskczzxsyokjjmfyhsyajhphxutyfjjmzvboybjqimubogvtkqspsevgbvisojebmtilnncndhjztzxmoxsbvisojebmtilnncndhjztzxmoxsbvisojebmtilnncndhjztzxmoxsbvisojebmtilnncndhjzthdvixydcczvfekrdyvngvogtffqcqcnyhycazimoeyscesrsabhngvsqcnowrhijsbgwmxcvfdctrslfiuokhkhjjmqicuncicvsdslvosmwmokhkhjjmqicuncicvsdslvosmwmokhkhjjmqicuncicvsdslvosmwmokhkhjjmqicuncicvsdslv
  9. *** Assuming RQT -> THE (keyword = "RLC")
  10. K = RLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLCRLC
  11. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  12. P = hanqytpxmewujsppkgnwpserdrwmhcrukzuccjotlcxvlepqlytpzrlscdomfmcrkvxekpkftjinklovpdpcstfzcbtpksjgryrwuefbjzeaziofdbwvyakhkqgeybzuqztmfsrnqvdesteguquyssepmfkwymflkcgatdesofbzjvyujwrljkpjmflkcgatdesofbzjvyujwrljkpjbmzbdzntjvjptrtkpxyljfscbchualegyafjlmezmypkrualerpncxumfkmypjjsmcecchqhacozljkwwhmzdgyaxjhzpcgprgyxcxzlprgwqqdlkpovzsitezphkjvrsvppeufbgpgpzikxugdgpzikxuyyvwpbqwqlppchaxjwmejmxavmylrkmcaxjqjyfmyaefdiyfuskynjdpvjdsjfjcgvpjkwiebzereanqqljflpsjfjcgvpjkwiebzereanqqljflpsjfjcgvpjkwiebzereanqqljflpsjfjcgvpjkwiebzereanqyrszlvuqzqjcvyoumseusfuqwtntezemepqxqwjfsvjqbjfprpeeusjezectivfagyxkjoqswrzkfpctflchyyeaxjhwzlbzzqsjrpcjljatdchyyeaxjhwzlbzzqsjrpcjljatdchyyeaxjhwzlbzzqsjrpcjljatdchyyeaxjhwzlbzzqsjrpcj
  13. *** Assuming QTM -> THE (keyword = "DOS")
  14. K = DOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOSDOS
  15. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  16. P = vxxevdduwstexpzdhqbtzgbbrogaemfrunrmqgyhimlsvsmazvddwbzpmrlwtjmfhflbudhphgsbhvcszrmmgqpnzlhmuggqfvbkrotytnbknfytalksiohrynqsvlnranqwtpbbnfrbchbqinempcsmwthgmjpzhmuxdrbccclngfmrtkovxhzxjpzhmuxdrbccclngfmrtkovxhzxywnynnkdxstdqbhhzlvvxccqymvrkzbqmxpxiwswwmmufrkzbbdkmlrwthwmmtxpwqbmqeavxmcwvxhgkewnaqmxhxejdzqdoqmumlwvdoqknariudlfnpshbjdeuxsbgszdbetyqddznfulrqrdznfulrimsgdyaknvdmmvxhxtwsgwlxfavvfhwqxhxntmcwmxotasmceghibgndstrpttgmuszxhgwblnbbsxxenvxcvdpttgmuszxhgwblnbbsxxenvxcvdpttgmuszxhgwblnbbsxxenvxcvdpttgmuszxhgwblnbbsxxevbgwvjranntqsicrwgbegceetdbqonbwsmalngxccjgapgpdozsbeggonbmhfftxqmuuxlagtbnhpdzdtimvvisxhxegnilnwaggbdztzgkhamvvisxhxegnilnwaggbdztzgkhamvvisxhxegnilnwaggbdztzgkhamvvisxhxegnilnwaggbdzt
  17. *** Assuming TMO -> THE (keyword = "QAV")
  18. K = QAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAVQAV
  19. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  20. P = ilurjaqitfhbkdwqvnohwtpyecdnsjsfrafjduvuwjygsfaxmjaqkymdjeztgxjsvcyprqvmuupovspgweajtemaniuartunsjyxflgmqaphatvgoixgfbvolbnfjiafxaetgdyobcepzupnvbbzdzfatgvdzxmmvjhlaepzpqiauczfqxcskvwkxmmvjhlaepzpqiauczfqxcskvwkmtamkayakgqqeyuvwyjskqzdmjifhmpnzlmkwtfktzarsfhmpyqyjyftgvtzaqkdtdpjdsxiljpkskvdxstaonzleksgqnnqcnzijyksqcnxbxewrqzcadpupgqsrkgytgwqpbgmnqrwatryfnerwatryffzgdqmxxbsqajilekhtfutylcnjssvtdlekbqzqtzllgopzqbtvfoukqgqedqgujhgwkvdjpiapyflurbskqsqdqgujhgwkvdjpiapyflurbskqsqdqgujhgwkvdjpiapyflurbskqsqdqgujhgwkvdjpiapyflurjytkswfxabqdgfpfttpbtqbrhaoelaptfaxybdkqzwuxcumqcwfpbtulapjutcglnzirkzxthyavmqnagwjijffleksdawiakxtuyqnqmuhuojijffleksdawiakxtuyqnqmuhuojijffleksdawiakxtuyqnqmuhuojijffleksdawiakxtuyqnq
  21. *** Assuming MOF -> THE (keyword = "TZH")
  22. K = TZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZHTZH
  23. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  24. P = fmiokonjhcipheknwblikqqmbdrktxpgfxgxavjrxxvhgcbljkonlmjexbahdyxpwqvqfnwarvdlwgmhkbbxqfaxowrbfqvbpkmugzdnexqvxujdpwuhtywcicbckwxglxfhdemlcqbqnrqbscpwencbhdwrwyajwxemobqnmrwxvqwgeudghwkhyajwxemobqnmrwxvqwgeudghwkhnhxnyxzohhenfmrwkvkghrnanxfgvjqbwmahxhclhwbfpgvjqmnzxvghdwhwbehehaqxatlfmxmlghwruthxpbwmshtunobndbwjxvlgndbuclbxfnaqxedrquntfhhmqhknqpdnbnskxufvgbbskxufvgtwhrnnlucgnbxfmshihcvhvmqkkgpwhamshcewrhwmzdpdwrpqwtlvynhebeedvxehkhwrgqwxqmcmiocghrgneedvxehkhwrgqwxqmcmiocghrgneedvxehkhwrgqwxqmcmiocghrgneedvxehkhwrgqwxqmcmiokmqlgtglxceahtmghqqpqrpoiolfzxqhcblvcrhrntvlzvandkcqpqvzxqxruqdmbwjfhalqimxwanoodxxfktcmshtrxxwxllqvmnoejvvrpxfktcmshtrxxwxllqvmnoejvvrpxfktcmshtrxxwxllqvmnoejvvrpxfktcmshtrxxwxllqvmnoe
  25. (...)
  26. *** Assuming ZAS -> EST (keyword = "SBF")
  27. K = SBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBFSBF
  28. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  29. P = gkkpiqohjdgricmoudmgmroocbtlrzqehyezbtlsvzwfidznkiqojokczcyjewzquswohoucstfmuinfmczzrdcymyszhrtdqiovebelgyoxyslenyvfvzuejaddiyyenydjecomascopsodtarxcpdzjeutxwckuzfkqcopnpyytsxegvbiiumiwckuzfkqcopnpyytsxegvbiiumiljylayxqifgodosumwiiippblzgexkodxkcivjdjjxzhqexkoooxzwejeujxzgicjbozbrngkznjiiutvrjyndxkuirwomdobdxhzwjiobdvancvhoysycfsoworhiforfmooreldoqmyshwedcqmyshwevxftolnvaiozzgkuigjdtjwksliiqujbkuiagxpjxkbenfxprruvmtaofgccgetzffmiuthoyyoodkkpaiipiocgetzffmiuthoyyoodkkpaiipiocgetzffmiuthoyyoodkkpaiipiocgetzffmiuthoyyoodkkpiorjiuenyagbfvnejrorrprpgqmdbyojdznwatipputnatcobmdorrtbyozsssekdxhhiynrgoyucomqevzgivdkuirtyvyyjnrtoomgktxsnzgivdkuirtyvyyjnrtoomgktxsnzgivdkuirtyvyyjnrtoomgktxsnzgivdkuirtyvyyjnrtoomg
  30. *** Assuming FSQ -> EST (keyword = "DZA")
  31. K = DZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZADZA
  32. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  33. P = vmpekvdjosiwxerdwibirgqtrdyatefgmngeqvqhxelhnsbszkvdltzeeraotyefwxlqmdwhhvkbwnchrrbegfhnodhbmgvifktkggtnlnqcnuqtpdkhaowjyciskdngsnfotetbcxrquhqiicwmeusbotwymyhzweumvrqucrdnvxmglkdnxwrxyhzweumvrqucrdnvxmglkdnxwrxnonnfnzvxhldfthwrlknxruqnevgczqimmhxxoslombmfgczqtdzelgotwomblxeoqqeqtsvmeclnxwyktonpimmzxtbdoiddimjellnddikcsrxmdaxnekhqbdtmxhtghrdqwtnidsrnumlgirsrnumlgamhydnskcndbevmzxiosvolmxaknfwoqmzxclmrommgtpkmrwgwabvfdhlreltveuhrxwywqdnqtsmpecnxrndeltveuhrxwywqdnqtsmpecnxrndeltveuhrxwywqdnqtsmpecnxrndeltveuhrxwywqdnqtsmpektglnjgsnclqhacgogqwgrweivbfgnqosbslcyxrujvspvhddrsqwgvgnqehuxtmimjmxasgitnwhdovtxevkasmzxtynxdnlsgvtdolzvchpevkasmzxtynxdnlsgvtdolzvchpevkasmzxtynxdnlsgvtdolzvchpevkasmzxtynxdnlsgvtdol
  34. *** Assuming LPH -> EST (keyword = "MTD")
  35. K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
  36. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  37. P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui
  38. *** Assuming LPH -> EST (keyword = "MTD")
  39. K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
  40. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  41. P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui
  42. *** Assuming LPH -> EST (keyword = "MTD")
  43. K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
  44. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  45. P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui
  46. *** Assuming VAS -> EST (keyword = "JSB")
  47. K = JSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSBJSB
  48. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  49. P = ptoyruxqnmpvrlqxdhvpqaxslkxuadznlhndkcpbedfommirtruxsstldlhnnfdzdwfxlxdgbcjvdmwoqlidamghvcbilachzrsenfnukhxbhbpnwceozidisjhmrchnrhmnnlsvjwlxtbxhcjvgltminndxgfgtddotulxtwychcwgnkekmrdqrfgtddotulxtwychcwgnkekmrdqrunhuehgurokxmsbdqfrmrytkudpnbtxhgtgrenmsngilznbtxsxgdfnnndngikrlnkxdkarptdwsmrdxeanhwhgtyraaxvhxkhgqdfsmxkhejrlelxhwhljbxaxalrosaoqxxvnuhxzqhblfnhlzqhblfnzgoxxurejmxidptyrpnmcnftwurmzdnktyrjkgyngtfnwjgyvadzvcexokllkncdooqrdxqxchxsmtoyjmrymxlkncdooqrdxqxchxsmtoyjmrymxlkncdooqrdxqxchxsmtoyjmrymxlkncdooqrdxqxchxsmtoyrsasmdnrhjkkozwnnaxvayvypuvmfhxnmirfjxrytdcrjcgxkqmxvacfhxdbbwnthgqlrhrapshdgxvunedprzmtyraxhechsracsxvktcbbwdprzmtyraxhechsracsxvktcbbwdprzmtyraxhechsracsxvktcbbwdprzmtyraxhechsracsxvk
  50. *** Assuming LPH -> EST (keyword = "MTD")
  51. K = MTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTDMTD
  52. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  53. P = msmvqsupljotokoucfsooxwqijvrzbwmjembhbnydbcnkjhpqqsurqqkbiglkebwcucwjuceybhscktnoihbxleeuayhjxbfwqqbmdktiewzeankvabnxfcgpifjqaempellkkqsiuiwrywfzitdkrjhlkcvdeeqcblssiwrtxaebudmibjkocooeeqcblssiwrtxaebudmibjkocootletcefsoniulqycocqkoxrhtbmmzqwfdseodljrldhjwmzqwqufbcmlkcldhioklhwbhzpmsbtrkocvbzlevfdswozyuufujfdpbcrkujfbipidjuguekhywyuzjonqxnouwtktfuyoeajcmfiyoeajcmxdnvutpbikuhbmswooljblcsurqkwclhswoiidxldsdkvhdxtxcxsbcuniikikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvikoxkukikbblnoocvnwaewqjsmvqqxrkampeiihnxtmlxwtxxtvossldewljhpcivoxrabpgbeujojwtxbdewbyauksfdpjogpxoqeceuuskdbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquuiqbzyvbmqxjswozvedaerpxbquui
  54. *** Assuming PHJ -> EST (keyword = "LKP")
  55. K = LKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKPLKP
  56. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  57. P = nbawzgvyzkxhptcvlttxcyfejsjsipxvxfvpikbzmpdwykqdrzgvaertpjpzlnpxlidfxvlszkvtlyuwcjqpyusfdozqxyktxzecvrlcwffnfjbleocwlgluqrtkzofvdfuzltetrijffzftarhetfkqzlljensrlpmbgjffugofkievwcsyplcpnsrlpmbgjffugofkievwcsyplcpczfcqfogpwwvuezlcdzypgficpnvnrftebspmzkazeqxxvnrfevopdvzllzeqwptzifpiidnbpuaypljcizfetebkpimvdtvsteypdayvstcrdjmxvpiftvzfmvixpweywcvfhlctvhcfjxdvtjhcfjxdvlewjvcdcryvqpnbkpxzkkzdbiszyxlzibkprwegzebrleveghylltkqvwwjtwlkpmwcpljofoffekbawrypgyvtwlkpmwcpljofoffekbawrypgyvtwlkpmwcpljofoffekbawrypgyvtwlkpmwcpljofoffekbawzeyaybvdfrwiwluvzyfhyghwxgturffzkqddrjpgfbkdhksvsckfhykrffpzjilbteyxppdyxeflsvdglmpnzlkbkpijfmofadykevdwrknzepnzlkbkpijfmofadykevdwrknzepnzlkbkpijfmofadykevdwrknzepnzlkbkpijfmofadykevdw

After analyzing the log file, Eve realized about the possibility of a longer key usage. Because she did not found any legible plaintext.
The imediate longer keyword length pointed by Sybil is “9”. So, she tried it…

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --brutus --file-path=alice-bob-crap.txt\
  2. > --plaintexts=the,and,ing,ent,ion,nth,ter,int,oft,tha,ere,tio,her,fth,eth,ati,hat,ate,sth,est\
  3. > --key-len=9 > report.txt

She started found some relevant attempts, look:

  1. (...)
  2. *** Assuming CNA -> INT (keyword = "T******GA")
  3. K = T******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GAT******GA
  4. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  5. P = fLPHJVGcocHWADRGpilHRJPTUwykSEIFMQzeaUQKWEOancASCJVGetjDEUZOWrepVXOPMGphrUKEVNFarbAEJEHQhdrAMJUIIdtuFGWMLQjcxTQWODNaayVJBBIVddxFSQEOWxtlBXUPUKjisBWPDUVuodVYPXHCpeeLVUPUFkdxUXPFLNwnhVRAXHCpeeLVUPUFkdxUXPFLNwnhVRAMOQgfxYVAGLGytrVROJNAkuaMEYFCCjiwLHAWOVeowAMIFCCjtnYEOFOWpowALADOTjeaSSYLEFenhVYNSOQiiwLZASBGhinCIPIEOennCINBSUqmnZXQDKKjbnSMAGTJarnPWWMIGlrxTMOFIUlrxTMOFAPaynMSNBNGuefLZAHOVoovLXDJNIpoaLZABLPkowLGWOKPkwqVAEUFGalbDLWUEXarhVYZPDQjtcLPHBNAknnDLWUEXarhVYZPDQjtcLPHBNAknnDLWUEXarhVYZPDQjtcLPHBNAknnDLWUEXarhVYZPDQjtcLPHJTJentFSQBLTaamFOJPWJkwoHVEEGQjocASOBYAkutUSSUHGwrcPWJUGQjerTXWLIPcmhZSJHTQphnNVWWEYdacLZASYQqdxKSJUTGhljUCKOEYdacLZASYQqdxKSJUTGhljUCKOEYdacLZASYQqdxKSJUTGhljUCKOEYdacLZASYQqdxKSJUTGhl
  6. (...)
  7. *** Assuming LPH -> STH (keyword = "*HEA*****")
  8. K = *HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
  9. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  10. P = YelhJVGIOVasaDRGVIEanjPTUCYDlaiFMQFETnmkWEOGNVtocJVGKTCwauZOWXEIotoPMGVHKngeVNFGRUtajEHQNDKtijUIIJTNycwMLQPCQmmwODNGARofbBIVJDQyoqEOWDTEutuPUKPILuspDUVAOWoupXHCVEXeruPUFQDQntpFLNCNAonaXHCVEXeruPUFQDQntpFLNCNAonaMOQMFQrraGLGETKonoJNAQUTfayFCCPIPedaWOVKOPtiiFCCPTGraoFOWVOPthaDOTPETloyLEFKNAounSOQOIPevaSBGNIGvepIEOKNGvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL
  11. *** Assuming LPH -> STH (keyword = "*HEA*****")
  12. K = *HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
  13. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  14. P = YelhJVGIOVasaDRGVIEanjPTUCYDlaiFMQFETnmkWEOGNVtocJVGKTCwauZOWXEIotoPMGVHKngeVNFGRUtajEHQNDKtijUIIJTNycwMLQPCQmmwODNGARofbBIVJDQyoqEOWDTEutuPUKPILuspDUVAOWoupXHCVEXeruPUFQDQntpFLNCNAonaXHCVEXeruPUFQDQntpFLNCNAonaMOQMFQrraGLGETKonoJNAQUTfayFCCPIPedaWOVKOPtiiFCCPTGraoFOWVOPthaDOTPETloyLEFKNAounSOQOIPevaSBGNIGvepIEOKNGvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL
  15. *** Assuming LPH -> STH (keyword = "*HEA*****")
  16. K = *HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
  17. C = YLPHJVGIOVHWADRGVIEHRJPTUCYDSEIFMQFETUQKWEOGNVASCJVGKTCDEUZOWXEIVXOPMGVHKUKEVNFGRUAEJEHQNDKAMJUIIJTNFGWMLQPCQTQWODNGARVJBBIVJDQFSQEOWDTEBXUPUKPILBWPDUVAOWVYPXHCVEXLVUPUFQDQUXPFLNCNAVRAXHCVEXLVUPUFQDQUXPFLNCNAVRAMOQMFQYVAGLGETKVROJNAQUTMEYFCCPIPLHAWOVKOPAMIFCCPTGYEOFOWVOPALADOTPETSSYLEFKNAVYNSOQOIPLZASBGNIGCIPIEOKNGCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  18. P = YelhJVGIOVasaDRGVIEanjPTUCYDlaiFMQFETnmkWEOGNVtocJVGKTCwauZOWXEIotoPMGVHKngeVNFGRUtajEHQNDKtijUIIJTNycwMLQPCQmmwODNGARofbBIVJDQyoqEOWDTEutuPUKPILuspDUVAOWoupXHCVEXeruPUFQDQntpFLNCNAonaXHCVEXeruPUFQDQntpFLNCNAonaMOQMFQrraGLGETKonoJNAQUTfayFCCPIPedaWOVKOPtiiFCCPTGraoFOWVOPthaDOTPETloyLEFKNAounSOQOIPevaSBGNIGvepIEOKNGvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL

Some letter contacts seem pretty good. She figured out an interesting pattern:

  1. (...)*HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA******HEA*****
  2. (...)GCINBSUWMGZXQDKKPBGSMAGTJGRGPWWMIGRRQTMOFIURRQTMOFAPGYGMSNBNGAEYLZAHOVUOOLXDJNIVOTLZABLPQOPLGWOKPQWJVAEUFGGLUDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHBNAQNGDLWUEXGRAVYZPDQPTVLPHJTJKNMFSQBLTGAFFOJPWJQWHHVEEGQPOVASOBYAQUMUSSUHGCRVPWJUGQPEKTXWLIPIMAZSJHTQVHGNVWWEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNLCUCKOEYJAVLZASYQWDQKSJUTGNL
  3. (...)GvenBSUWMGstqDKKPBGliaGTJGRGiswMIGRRQmioFIURRQmioFAPGYGfonBNGAEYevaHOVUOOetdJNIVOTevaBLPQOPecwOKPQWJoweUFGGLUwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhBNAQNGwhwUEXGRAouzPDQPTVelhJTJKNMyoqBLTGAFykjPWJQWHareEGQPOVtooBYAQUMnosUHGCRVisjUGQPEKmtwLIPIMAsojHTQVHGgrwWEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNLCnykOEYJAVevaSYQWDQdojUTGNL

The sequence GCIN could be explained by a plaintext being even, because the decrypt attempt was GCIN = Gven.
By the way not decrypted letters are preserved in upper case on the plaintext.

Now she got a good assumption to test with the Hangman:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=GCIN\
  2. > --plaintext=even --key-len=9 --max-attempts=10

The output was:

  1. *** The keyword was completely re-used 35 times before.
  2. The keyword's letter at position #1 was used to encrypt it.
  3. The effective keyword to encrypt the pattern was 'CHEA*****'.
  4. *** Decrypt attempts assuming that 'GCIN' leads to 'EVEN'...
  5. K C P
  6. __________________
  7. C Y w
  8. H L e
  9. E P l
  10. A H h
  11. * J J
  12. * V V
  13. * G G
  14. * I I
  15. * O O
  16. C V t
  17. __________________

The contacts seems good excepting by the H being mapped to h. Maybe YLPHJVG could be WELCOME. So, she:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=YLPHJVG\
  2. > --plaintext=WELCOME --key-len=9 --max-attempts=20 --file-path=alice-bob-crap.txt
  3. *** The keyword was completely re-used 0 times before.
  4. The keyword's letter at position #1 was used to encrypt it.
  5. The effective keyword to encrypt the pattern was 'CHEFVJC**'.
  6. *** Decrypt attempts assuming that 'YLPHJVG' leads to 'WELCOME'...
  7. K C P
  8. __________________
  9. C Y w
  10. H L e
  11. E P l
  12. F H c
  13. V J o
  14. J V m
  15. C G e
  16. * I I
  17. * O O
  18. C V t
  19. H H a
  20. E W s
  21. F A v
  22. V D i
  23. J R i
  24. C G e
  25. * V V
  26. * I I
  27. C E c
  28. H H a
  29. __________________

The sequence tasvi does not remember anything written in English. So, with this clue, she started to consider only
YLP -> WEL. If YLPH is not WELC maybe it could be WELL:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=YLPH\
  2. > --plaintext=WELL --key-len=9 --max-attempts=20 --file-path=alice-bob-crap.txt
  3. *** The keyword was completely re-used 0 times before.
  4. The keyword's letter at position #1 was used to encrypt it.
  5. The effective keyword to encrypt the pattern was 'CHEW*****'.
  6. *** Decrypt attempts assuming that 'YLPH' leads to 'WELL'...
  7. K C P
  8. __________________
  9. C Y w
  10. H L e
  11. E P l
  12. W H l
  13. * J J
  14. * V V
  15. * G G
  16. * I I
  17. * O O
  18. C V t
  19. H H a
  20. E W s
  21. W A e
  22. * D D
  23. * R R
  24. * G G
  25. * V V
  26. * I I
  27. C E c
  28. H H a
  29. __________________

The letter contacts looks good excepting for tase but she tried more decryptions considering this assumption:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=YLPH\
  2. > --plaintext=WELL --key-len=9 --max-attempts=30 --file-path=alice-bob-crap.txt
  3. *** The keyword was completely re-used 0 times before.
  4. The keyword's letter at position #1 was used to encrypt it.
  5. The effective keyword to encrypt the pattern was 'CHEW*****'.
  6. *** Decrypt attempts assuming that 'YLPH' leads to 'WELL'...
  7. K C P
  8. __________________
  9. C Y w
  10. H L e
  11. E P l
  12. W H l
  13. * J J
  14. * V V
  15. * G G
  16. * I I
  17. * O O
  18. C V t
  19. H H a
  20. E W s
  21. W A e
  22. * D D
  23. * R R
  24. * G G
  25. * V V
  26. * I I
  27. C E c
  28. H H a
  29. E R n
  30. W J n
  31. * P P
  32. * T T
  33. * U U
  34. * C C
  35. * Y Y
  36. C D b
  37. H S l
  38. E E a
  39. __________________

Yes, EHRJPT -> cannPT suggests cannot, so she tried it on hangman:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=EHRJPT\
  2. > --plaintext=cannot --key-len=9 --max-attempts=30 --file-path=alice-bob-crap.txt
  3. *** The keyword was completely re-used 2 times before.
  4. The keyword's letter at position #1 was used to encrypt it.
  5. The effective keyword to encrypt the pattern was 'CHEWBA***'.
  6. *** Decrypt attempts assuming that 'EHRJPT' leads to 'CANNOT'...
  7. K C P
  8. __________________
  9. C Y w
  10. H L e
  11. E P l
  12. W H l
  13. B J i
  14. A V v
  15. * G G
  16. * I I
  17. * O O
  18. C V t
  19. H H a
  20. E W s
  21. W A e
  22. B D c
  23. A R r
  24. * G G
  25. * V V
  26. * I I
  27. C E c
  28. H H a
  29. E R n
  30. W J n
  31. B P o
  32. A T t
  33. * U U
  34. * C C
  35. * Y Y
  36. C D b
  37. H S l
  38. E E a
  39. __________________

Still good and it has revealed to her JVG -> ivG. It strongly suggests ive [I've]. Continuing she saw another obvious
pattern WADRGV -> secreGV suggesting secret. She tried this pattern:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --hangman --pattern=WADRGV\
  2. > --plaintext=secret --key-len=9 --max-attempts=30 --file-path=alice-bob-crap.txt
  3. *** The keyword was completely re-used 1 times before.
  4. The keyword's letter at position #3 was used to encrypt it.
  5. The effective keyword to encrypt the pattern was '**EWBACC*'.
  6. *** Decrypt attempts assuming that 'WADRGV' leads to 'SECRET'...
  7. K C P
  8. __________________
  9. * Y Y
  10. * L L
  11. E P l
  12. W H l
  13. B J i
  14. A V v
  15. C G e
  16. C I g
  17. * O O
  18. * V V
  19. * H H
  20. E W s
  21. W A e
  22. B D c
  23. A R r
  24. C G e
  25. C V t
  26. * I I
  27. * E E
  28. * H H
  29. E R n
  30. W J n
  31. B P o
  32. A T t
  33. C U s
  34. C C a
  35. * Y Y
  36. * D D
  37. * S S
  38. E E a
  39. __________________

Now all makes sense. So, she found the another keyword part, combining the two into one:

  1. CHEWBA***
  2. | **EWBACC*
  3. ---------
  4. CHEWBACC*

Of course that the keyword is CHEWBACCA now she can use another application mode called decrypt.

The decrypt mode

The usage of it is pretty straigthforward. Look what Eve done:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --decrypt --key=chewbacca\
  2. > --file-path=alice-bob-crap.txt
  3. wellivegotasecreticannotsayblamemodernmovementtogiveitawayyouvegotsomethingiunderstandholditintightlycall
  4. oncommandleapoffaithdoyoudoubtcutyouinijustcutyououtwhateveryoudodonttellanyonewhateveryoudodonttellanyon
  5. elookforreflectionsinyourfacecaninedevotiontimecanteraseoutonthecornerlockedinyourroomineverbelievethemin
  6. everassumestuckinbeliefthereisaliepromiseispromiseaneyeforaneyewevegotsomethingtorevealnoonecanknowhowitf
  7. eelswhateveryoudodonttellanyonewhateveryoudodonttellanyonewhateveryoudodonttellanyonewhateveryoudodonttel
  8. lithinkyoualreadyknowhowfaridgonottosayyouknowtheartisntgoneimtakingmysongtothegravewhateveryoudodonttell
  9. anyonewhateveryoudodonttellanyonewhateveryoudodonttellanyonewhateveryoudodonttell

She cracked the ciphertext. The plaintext is the lyrics of the song The Lost Art of Keeping a Secret
from Queens of The Stone Age.

The encrypt mode

This mode just applies the standard Vigenère cipher. The usage is pretty simple, look:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --encrypt --key=chewbacca\
  2. > --file-path=the-lost-art-of-keeping-a-secret.txt > out.txt

The Riddler

The riddler mode can be used to generate puzzles for being cracked with the own vigcrack. This mode
works by picking up a plaintext from a specified directory and encrypting it using a pseudo-random key.

Well, the basic usage of this mode is:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt

With the command shown above, the vigcrack will find for a sub-directory called plaintexts. It is also
expecting the existence of several .txt files (the plaintexts) inside of this sub-directory.

Now, supposing that you organized it better, separating texts by language into other sub-directories, in this case:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
  2. > --plaintexts-home=/usr/local/share/corpora/en

You can also specify the minimal and maximium keyword length:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
  2. > --plaintexts-home=/usr/local/share/corpora/en --min-key-len=3 --max-key-len=5

You can also show the keyword, for cases when you send the challenge for someone:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
  2. > --plaintexts-home=/usr/local/share/corpora/en --min-key-len=3 --max-key-len=5\
  3. > --show-keyword

Maybe even during your own puzzles you want to save the keyword for consulting if it gets really hard:

  1. eve@EDEN:~/src/tree/sin/curiosity# vigcrack --riddler --save-as=challenge.txt\
  2. > --plaintexts-home=/usr/local/share/corpora/en --min-key-len=3 --max-key-len=5\
  3. > --save-keyword=answer.txt

Well, “That’s all folks…” enjoy! ;)