Cryptography Programming Lab

sunflowerplateAI and Robotics

Nov 21, 2013 (3 years and 8 months ago)

95 views

Cryptography Programming Lab

Mike Scott

Why Cryptography?


Astrachan’s

Law:


“Do not give an assignment that computes something
that is more easily figured out without a computer. ...
Show off the power of computation.”


Secrets are interesting


Practical applications


Is it safe to use my credit card to purchase something
via a website?


Fascinating history


Mary Queen of Scots, Alan Turing


Application of mathematics and programming


Plan for today


Look at four different ciphers


Complete program involving each



Caesar


Columnar


Random Substitution


Vigenère



Definitions


Cryptography


The art and study of hiding information


Cipher


Algorithm for performing encryption and decryption


Encryption


Converting plain text (or information) to unintelligible
text (aka cipher text) that cannot be understood
without knowing how the information was converted


Decryption


recovering the original plain text from the cipher text



Caesar Cipher


Named after Julius Caesar


Also called the shift cipher


Example of a substitution cipher


Each letter (or character) is replaced by
another letter in the alphabet




Caesar cipher

Example with a shift of 5


ABCDEFGHIJKLMNOPQRSTUVWXYZ
Plain

FGHIJKLMNOPQRSTUVWXYZABCDE

Encrypted


COMPUTER SCIENCE
Plain

HTRUZYJWXHNJSHJ

Encrypted


Assume all non letters removed.


Variations


Using computer could simply apply shift to all
characters, not just upper case letters


Printable ASCII characters space to ~ (32


126)



Maintain or remove non letters?



lower case to upper case?



Breaking Caesar Cipher


Brute force


With only letters try all 25 possibilities


Still not hard if all ASCII

Caesar Programming Problem


Log in


Go to http://userweb.cs.utexas.edu/~scottm/


Click on link to Crypto Resources at bottom of
page


Download Caesar.java to desktop


Start Eclipse (or other IDE if you prefer)


Create project


Add file


Complete method
printAllShifts
(String
msg
)


Columnar Cipher


Example of a Transposition cipher


The characters from the original message are
used, but put in a different order, based on the
cipher

Hook ‘
em

Horns! We bleed orange!
Plain



Pick a number of rows for the cipher


Fill in the grid in column major order


Columnar Encryption

Hook ‘
em

Horns! We bleed orange!








Read off rows to create message

H’o

loeoerWer!omneeak

s
dn

H!b

g


H

'

o

l

o

e

o

e

r

W

e

r

!

o

m

n

e

e

a

k

s

d

n

H

!

b

g

Columnar Programming Problem


Download Columnar.java



Complete the method

printColumnar
(String clear,





int

rows)

Random Substitution Cipher


How strong is the Caesar cipher?



Pick a secret word with no repeat letters,
computery


ABCDEFGHIJKLMNOPQRSTUVWXYZ


Plain

COMPUTERY
ABDFGHIJKLNQSVWXZ

Encrypted




Example

ABCDEFGHIJKLMNOPQRSTUVWXYZ


Plain

COMPUTERY
ABDFGHIJKLNQSVWXZ

Encrypted


THE ANSWER FOR NUMBER THREE IS A

THEANSWERTONUMBERTHREEISA
Plain

NRUCGLVUKNHGQFOUKNRKUUYLC

Encrypted



Random Substitution Ciphers


Instead of picking a keyword randomly pick
letters


Must share the whole key, but lots of
possibilities


26! possible keys =
4.03291461
×

10
26


Assume we could check a billion keys a second


It would take
1.27882883
×

10
10
years to
check them all.


About the age of the universe



But ...


But substitution ciphers turn out to be
relatively easy to solve


Why?

Letter Frequency

Cracking the Substitution Cipher


Given an encrypted message count how often
each character occurs


If only letters, assume most frequent letter is
e, next most frequent is t, next most frequent
is a, and so forth


Apply the potential key


Look for clear words


Alter key as appropriate

Substitution Programming Problem


With a computer a key can easily be created that
uses all printable characters not just the letters.


Download DecryptSub.java


Complete the method

int
[]
createFreqTable
(String encrypted)


The method returns an array of length 128. All
ASCII chars are counted.


The index of the array maps to the ASCII value of
the char

Substitution Programming Problem


When run the program:


converts a hard coded file (which I have encrypted
with a randomly generated substitution key) to a
String


creates a frequency table (using your method)


creates an initial key based on the frequency table and
the “normal” frequency of printable ASCII chars


applies the initial key to the encrypted message and
displays it


prompts for change in key, applies it and displays new
decrypted message (A bit of an art)

Vigenère

Cipher


Named after
Blaise

de
Vigenère


“The Unbreakable Cipher”


A poly
-
alphabetic substitution cipher


Each letter in the plain text can encrypt to
multiple letters


Vigenère

Cipher



All 26 Caesar Ciphers


Pick

a secret word


Repeat secret word over
the plain text


The

secret word letter
gives the row, the plain
text gives the column


The

letter at the
intersection is the
cipher text


Vigenère

Cipher Example

Secret word:
TEXAS

Plain text:
MEET AT THE TOWER

TEXASTEXASTEXA

MEETATTHETOWER

1
st

letter, row T, column M
-
> F

2
nd

letter, row E, column E
-
> I

3
rd

letter, row X, column E
-
> B



FIBTSMXEELHABR




Large
Vigenère

Example

0
2
4
6
8
10
12
14
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
Actual
Expected
Frequencies In Cipher text

0
1
2
3
4
5
6
7
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
Longer Secret Words with more of the letters flattens it more!

Breaking the
Vigenère

Cipher


Given a long enough sample of cipher text it is
possible to break the
Vigenère

cipher


Assume the secret word is TEXAS which has a
length of 5.


Notice then there are 5 ways to encode the
plain text word “the”


Some words show up a lot in regular language


So let’s look for 3 letter sequences that are
repeated in a cipher text

Cipher Text


BLX
DLA
MPSLHVVFJHQLNWPLLHSWRLBMLMK
EKLXLTWEPFTLHQBOJMSXNQHXEEJBQXYUKIAI
LMLBSWWYZTAOIFNXEYBNUXSCAFHPAVAGXX
GWNTLNLAIKAJKEQOJYSOTZXFBGAGRFNYHJF
TSGHJYGPRPKWIXFCSEMKCJXHRLAMCAUJBRD
TZXHXYKMLXTXHPIOOXHCOJMLBBSEEKCWHJ
QHWLXOAFZIQADXAEEFFCZOFOMSISELLSLW
MPCGOIOEVMLXTZXLXDLHPAMWLSJUUAEK

DLA
EQIOTWMRGGIQOVHYYTXNPKEKL

3 Letter Repeated Sequences

DLA [270]

EKL [265]

HPA [165]

KEK [265]

LAM [159]

LXD [255
]

LXT [70]

MLB [125]

MLX [70]

OJM [145]

TZX [50, 130, 80
]

XDL [255]


Numbers are distances between the repeated 3

letter sequence

Using Repeated Sequences


Some repeated sequences will just be random.


But, some will be due to the same word being
encoded with the same parts of the secret
word!


If this is the case the secret word is a factor of
the distance between the repeated sequences

Factors of Distances

DLA: [2, 3, 5, 6, 9, 10, 15, 18, 27, 30, 45, 54, 90, 135, 270]

EKL: [5, 53, 265]

HPA: [3, 5, 11, 15, 33, 55, 165]

KEK: [5, 53, 265]

LAM: [3, 53, 159]

LXD: [3, 5, 15, 15, 17, 51, 85, 255]

LXT: [2, 5, 7, 10, 14, 35, 70]

MLB: [5, 25, 125]

MLX: [2, 5, 7, 10, 14, 35, 70]

OJM: [5, 29, 145]

TZX: [2, 5, 10, 25, 50]

TZX: [2, 5, 10, 13, 26, 65, 130]

TZX: [2, 4, 5, 8, 8, 10, 16, 20, 40, 80]

XDL: [3, 5, 15, 15, 17, 51, 85, 255]

Frequency of Factors

2
-

6

3
-

5

4
-

1

5
-

13

6
-

1

7
-

2

8
-

2

9
-

1

10
-

6

11
-

1

13
-

1

14
-

2

15
-

6

16
-

1

17
-

2

18
-

1

20
-

1

25
-

2

26
-

1

27
-

1

29
-

1

30
-

1

33
-

1

35
-

2

40
-

1

45
-

1

50
-

1

51
-

2

53
-

3

54
-

1

55
-

1

65
-

1

70
-

2

80
-

1

85
-

2

90
-

1

125
-

1

130
-

1

135
-

1

145
-

1

159
-

1

165
-

1

255
-

2

265
-

2

270
-

1

Secret Code Word


Strong evidence the code word is length 5


So start with first character and do frequency
analysis on every 5
th

character. Will just be a
simple Caesar shift


Repeat starting at second character and every
5
th


5 frequency analysis problems

Simon Singh
Vigenère

Cracking Tool

Slide for Best Fit

First Letter of Secret Word is V in this example

Vigenère

Programming Problem


Download FindSecretWordLength.java



Complete the


p
rintFactors
(String
repeatedSection
,
int

distance)

method that prints all factors of distance in order



If you finish add a method to find the most frequent
factor. Feel free to change
printFactors

to return the
factors found.