🎉 从330转为WashU帮助手册啦!

CSE442
模块
Cse442t L1

Lecture 1

I changed all the element in set to lowercase letters. I don't know why K is capitalized.

Brian Garnett

bcgarnett@wustl.edu

Math Phd... Great!

Proof based course and write proofs.

CSE 433 for practical applications.

OH: Right after class! 4-5 Mon, Urbaur Hall 227

Pass and Shalat

Alice sending information to Bob

Assuming Eve can always listen

Rule 1. Message, Encryption to Code and Decryption to original Message.

Kerckhoffs' principle

It states that the security of a cryptographic system shouldn't rely on the secrecy of the algorithm (Assuming Eve knows how everything works.)

Security is due to the security of the key.

Private key encryption scheme

Let M\mathcal{M} be the set of message that Alice will send to Bob. (The message space) "plaintext"

Let K\mathcal{K} be the set of key that will ever be used. (The key space)

GenGen be the key generation algorithm.

kGen(K)k\gets Gen(\mathcal{K})

cEnck(m)c\gets Enc_k(m) denotes cipher encryption.

mDeck(c)m'\gets Dec_k(c') mm' might be null for incorrect cc'.

Pr[KK:Deck(Enck(M))=m]=1Pr[K\gets \mathcal{K}:Dec_k(Enc_k(M))=m]=1 The probability of decryption of encrypted message is original message is 1.

*in some cases we can allow the probailty not be 1

Some examples of crypto system

Let M=\mathcal{M}= {all five letter strings}.

And K=\mathcal{K}= {1-101010^{10}}

Example:

P[k=k]=11010P[k=k']=\frac{1}{10^{10}}

Enc1234567890("brion")="brion1234567890"Enc_{1234567890}("brion")="brion1234567890"

Dec1234567890(brion1234567890)="brion"Dec_{1234567890}(brion1234567890)="brion"

Seems not very secure but valid crypto system.

Early attempts for crypto system.

Caesar cipher

M=\mathcal{M}= finite string of texts

K=\mathcal{K}= {1-26}

Enck=[(i+K)%26 for im]=cEnc_k=[(i+K)\% 26\ for\ i \in m]=c

Deck=[(i+26K)%26 for ic]Dec_k=[(i+26-K)\% 26\ for\ i \in c]

def caesar_cipher_enc(s: str, k:int):
    return ''.join([chr((ord(i)-ord('a')+k)%26+ord('a')) for i in s])
 
def caesar_cipher_dec(s: str, k:int):
    return ''.join([chr((ord(i)-ord('a')+26-k)%26+ord('a')) for i in s])

Substitution cipher

M=\mathcal{M}= finite string of texts

K=\mathcal{K}= bijective linear transformations (for English alphabet, K=26!|\mathcal{K}|=26!)

Enck=[iK for im]=cEnc_k=[iK\ for\ i \in m]=c

Deck=[iK1 for ic]Dec_k=[iK^{-1}\ for\ i \in c]

Fails to frequency analysis

Vigenere Cipher

M=\mathcal{M}= finite string of texts

K=\mathcal{K}= key phrase of a fixed length

def viginere_cipher_enc(s: str, k: List[int]):
    res=''
    n,m=len(s),len(k)
    j=0
    for i in s:
        res+=caesar_cipher_enc(i,k[j])
        j=(j+1)%m
    return res
 
def viginere_cipher_dec(s: str, k: List[int]):
    res=''
    n,m=len(s),len(k)
    j=0
    for i in s:
        res+=caesar_cipher_dec(i,k[j])
        j=(j+1)%m
    return res

One time pad

Completely random string, sufficiently long.