Một số hệ mật mã đơn giản

Mã dịch chuyển (shift cipher)

Đặt P=C=K=Z26 size 12{Z rSub { size 8{"26"} } } {}. Với 0K25 size 12{0 <= K <= "25"} {}, định nghĩa:

eK(x)=x+K size 12{e rSub { size 8{K} } \( x \) =x+K} {} mod 26

dK(y)=yK size 12{d rSub { size 8{K} } \( y \) =y - K} {} mod 26

(x, y size 12{ in } {}Z26 size 12{Z rSub { size 8{"26"} } } {}).

Trường hợp đặc biệt K=3 ứng với hệ mật mã Caesar.

Ví dụ:

Plain: meet me after the toga party

Cipher: PHHW PH DIWHU WKH WRJD SDUWB

Mã thay thế (substitution cipher)

Đặt P=C=Z26 size 12{Z rSub { size 8{"26"} } } {}. Với K size 12{K} {} gồm tất cả các hoán vị có thể của 26 ký hiệu 0, 1, …, 25. Với mỗi K size 12{ in } {}K định nghĩa:

eK(x)=K(x) size 12{e rSub { size 8{K} } \( x \) =K \( x \) } {} mod 26

dK(y)=K1(y) size 12{d rSub { size 8{K} } \( y \) =K rSup { size 8{ - 1} } \( y \) } {} mod 26

Trong đó K1 size 12{K rSup { size 8{ - 1} } } {} là hoán vị ngược của K.

Hệ mật mã Affine

Đặt P=C= Z26 size 12{Z rSub { size 8{"26"} } } {} và đặt

K={(a, b) size 12{ in } {}Z26 size 12{Z rSub { size 8{"26"} } } {}X Z26 size 12{Z rSub { size 8{"26"} } } {}: gcd(a, 26)=1}.

Với K=(a, b) size 12{ in } {}K, định nghĩa:

eK(x)=ax+b size 12{e rSub { size 8{K} } \( x \) = ital "ax"+b} {} mod 26

dK(y)=a1(yb) size 12{d rSub { size 8{K} } \( y \) =a rSup { size 8{ - 1} } \( y - b \) } {} mod 26

(x, y size 12{ in } {}Z26 size 12{Z rSub { size 8{"26"} } } {}).

Trong đó a1 size 12{a rSup { size 8{ - 1} } } {} size 12{ in } {}Z26 size 12{Z rSub { size 8{"26"} } } {}, sao cho aa1a1a1(mod26) size 12{ ital "aa" rSup { size 8{ - 1} } equiv a rSup { size 8{ - 1} } a equiv 1 \( "mod""26" \) } {}.

Ví dụ:

K=(7, 3)

Giải thuật Euclid mở rộng:

Tính phần tử nghịch đảo: a-1

1. n0 = n

2. a0 = a

3. t0 = 0

4. t = 1

5. q = n0a0 size 12{ left lfloor { {n rSub { size 8{0} } } over {a rSub { size 8{0} } } } right rfloor } {}

6. r = n0 – q x a0

7. while r > 0 do

8. temp = t0 – q x t

9. If temp size 12{ >= {}} {} 0 then temp = temp mod n

10. If temp < 0 then temp = n – ((-temp) mod n)

11. t0 = t

12. t = temp

13. n0 = a0

14. a0 = r

15. q = n0a0 size 12{ left lfloor { {n rSub { size 8{0} } } over {a rSub { size 8{0} } } } right rfloor } {}

16. r = n0 – q x a0

17. if a0 size 12{ <> } {} 1 then

a không có nghịch đảo

else

a-1 = t mod n

Hệ mật mã Vigenere

Đặt m là một số nguyên dương. Định nghĩa P=C=K= (Z26)m size 12{ \( Z rSub { size 8{"26"} } \) rSup { size 8{m} } } {}. Với một khóa K=( k1,k2,...,km size 12{k rSub { size 8{1} } ,k rSub { size 8{2} } , "." "." "." ,k rSub { size 8{m} } } {}), chúng ta định nghĩa:

e K ( x 1 , x 2 , . . . , x m ) = ( x 1 + k 1 , x 2 + k 2 , . . . , x m + k m ) size 12{e rSub { size 8{K} } \( x rSub { size 8{1} } ,x rSub { size 8{2} } , "." "." "." ,x rSub { size 8{m} } \) = \( x rSub { size 8{1} } +k rSub { size 8{1} } ,x rSub { size 8{2} } +k rSub { size 8{2} } , "." "." "." ,x rSub { size 8{m} } +k rSub { size 8{m} } \) } {}

d K ( y 1 , y 2 , . . . , y m ) = ( y 1 k 1 , y 2 k 2 , . . . , y m k m ) size 12{d rSub { size 8{K} } \( y rSub { size 8{1} } ,y rSub { size 8{2} } , "." "." "." ,y rSub { size 8{m} } \) = \( y rSub { size 8{1} } - k rSub { size 8{1} } ,y rSub { size 8{2} } - k rSub { size 8{2} } , "." "." "." ,y rSub { size 8{m} } - k rSub { size 8{m} } \) } {}

Trong đó các phép +, - được thực hiện trên trường Z26 size 12{Z rSub { size 8{"26"} } } {}.

Hệ mật mã Hill

Đặt m là một số nguyên dương. Đặt P=C=( Z26 size 12{Z rSub { size 8{"26"} } } {})m và đặt

K={m x m là ma trận khả nghịch trên Z26 size 12{Z rSub { size 8{"26"} } } {}}.

Với K size 12{ in } {}K, định nghĩa:

eK(x)=xK size 12{e rSub { size 8{K} } \( x \) = ital "xK"} {} mod 26

dK(y)=yK1 size 12{d rSub { size 8{K} } \( y \) = ital "yK" rSup { size 8{ - 1} } } {} mod 26

(x, y size 12{ in } {}Z26 size 12{Z rSub { size 8{"26"} } } {}).

Trong đó: KK-1 = Imvới Imlà ma trận đơn vị.

Ví dụ: Với m=2; K= 31178 size 12{ left ( {} cSub { size 8{3} } cSup { size 8{"11"} } {} cSub { size 8{7} } cSup { size 8{8} } right )} {}, K-1= 2371118 size 12{ left ( {} cSub { size 8{"23"} } cSup { size 8{7} } {} cSub { size 8{"11"} } cSup { size 8{"18"} } right )} {}

có x=(9, 20), xK=(3, 4); có x=(11, 24), xK=(11, 22);

Mã hoán vị (permutation cipher)

Đặt m là một số nguyên dương. Đặt P=C=( Z26 size 12{Z rSub { size 8{"26"} } } {})m và đặt K là tập tất cả các hoán vị của tập {1, …, m}. Với K size 12{ in } {}K, định nghĩa:

eK(x1,...,xm)=(xK(1),...,xK(m)) size 12{e rSub { size 8{K} } \( x rSub { size 8{1} } , "." "." "." ,x rSub { size 8{m} } \) = \( x rSub { size 8{K \( 1 \) } } , "." "." "." ,x rSub { size 8{K \( m \) } } \) } {} mod 26

dK(y1,...,ym)=(yK1(1),...,yK1(m)) size 12{d rSub { size 8{K} } \( y rSub { size 8{1} } , "." "." "." ,y rSub { size 8{m} } \) = \( y rSub { size 8{K rSup { size 6{ - 1} } \( 1 \) } } , "." "." "." ,y rSub {K rSup { size 6{ - 1} } \( m \) } size 12{ \) }} {} mod 26

Trong đó K1 size 12{ size 8{K rSup { size 6{ - 1} } }} {} là hoán vị ngược của K size 12{ size 8{K}} {}.

Mã dòng (stream cipher)

Định nghĩa

Một hệ mã dòng là một bộ 7 (P, C, K, L, F,ε size 12{ε} {},D), thỏa mãn các điều kiện sau đây:

  1. P là tập hữu hạn các bản tin rõ
  2. C là một tập hữu hạn các bản tin đã mã hóa
  3. K là không gian khóa, là tập hữu hạn các khóa
  4. L là tập các dòng khóa
  5. F =(f 1 , f 2, ….) là bộ sinh. Với i>=1: f i : KxP i-1 -> L
  6. Với mỗi z size 12{ in } {}<L, tồn tại một giải thuật mã hóa ez size 12{e rSub { size 8{z} } in } {}ε size 12{ε} {}và một giải thuật giải mã dz size 12{d rSub { size 8{z} } in } {}D. Trong đó: ez: size 12{e rSub { size 8{z} } :} {}P size 12{ rightarrow } {}Cdz: size 12{d rSub { size 8{z} } :} {}C size 12{ rightarrow } {}P là các hàm sao cho dz(ez(x))=x size 12{d rSub { size 8{z} } \( e rSub { size 8{z} } \( x \) \) =x} {} với mọi x size 12{ in } {}P.