Tải bản đầy đủ (.docx) (35 trang)

Hệ thống mật mã cổ điển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (775.69 KB, 35 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - TRUYỀN THÔNG
----

BÁO CÁO LÍ THUYẾT MẬT MÃ
ĐỀ TÀI: HỆ THỐNG MẬT MÃ CỔ ĐIỂN
GVHG:
Nhóm SV:

GV Hán Trọng Thanh
Nhóm 3

Hà Nội- ngày 23 tháng 2 năm 2016

1


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - TRUYỀN THÔNG
----

BÁO CÁO LÍ THUYẾT MẬT MÃ
ĐỀ TÀI: HỆ THỐNG MẬT MÃ CỔ ĐIỂN

Hà Nội- ngày 11 tháng 2 năm 2016

2


MỤC LỤC


MỞ ĐẦU
Bảo mật an toàn thông tin là một vấn đề rất được coi trọng từ ngày xưa tới nay.
Con người luôn muốn thông tin của mình khi được truyền đi sẽ không bị phát hiện bởi
một đối tượng mà họ không mong muốn. Từ đó, họ đã đưa ra rất nhiều phương pháp
để bảo mật thông tin. Phương pháp sử dụng phổ biến nhất đó là họ sẽ chuyển bản tin
gửi họ muốn gửi đi dưới dạng một bản tin khác mà đối tượng không mong muốn sẽ
không thể hiểu được. Qua quá trình lịch sử của loài người thì các phương thức và các
hệ thống bảo mật thông tin đã ra đời để đảm bảo tính an toàn thông tin mà con người
mong muốn khi truyền đi. Ban đầu thì các phương thức và hệt thống bảo mật thông tin
là khá là đơn giản, nhưng qua quá trình phát triển của thì độ an toàn trong bảo mật
thông tin ngày càng được nâng cao và phức tạp. Nhờ đó, thông tin được truyền đi đảm
bảo độ an toàn rất cao.

3


Nội dung

4


1.

Dịch mã

Một trong những hệ thống mật mã sơm nhất được thiết kế bởi Julius Ceasar.
Người ta cho rằng ông đã muốn gửi đi 1 văn bản đã được mã hóa như là: “Nước Pháp
được phân chia thành 3 phần”
Nhưng ông không muốn Brutus đọc được. Ông đã dịch mỗi ký tự của đoạn tin 3 vị trí
trong bảng chữ cái. Theo đó a trở thành D, b trở thành E, c trở thành F… Nếu đó là ký

tự cuối cùng trong bảng chữ cái thì sẽ được dịch từ A. Theo đó x trở thành A, y trở
thành B, và z trở thành C. Đoạn mã lúc đó là:
JDXOLVGLYLGHGLQWRWKUHHSDUWV.
Công việc dịch mã sẽ được thực hiện bằng cách dịch ngược lại 3 ký tự.
Chìa khóa để giải mã là 1 số nguyên k với 0<=k<=25. Công việc mã hóa được
biểu diễn dưới sơ đồ: x  x + k.
Việc giải mã là x  x – k. Ví dụ, Ceasar đã sử dụng k=3. Việc giải loại mã trên
được chia thành 4 trường hợp:
1.1. Chỉ có văn bản được mật mã hóa:

Eve chỉ có văn bản đã được mã hóa. Cách tốt nhất mà cô ấy nghĩ ra là
miệt mài tìm kiếm, từ 26 keys có thể là chìa khóa của văn bản mật. Nếu đoạn
tin nhắn dài thêm vài ký tự nữa, thì không hề dễ chịu chút nào vì điều đó tương
đương với việc sẽ có hơn 1 thông tin được đề cập trong văn bản mật mã. Nếu
bạn không tin có thể tìm thêm 1 vài từ 4 hoặc 5 ký tự và dịch chúng. Một
trường hợp như vậy được đề cập trong bài tập 1. Một trường hợp khác, nếu
đoạn văn bản đủ dài, cần phải làm 1 bộ đếm tần số cho các chữ cái khác nhau.
Ký tự e xuất hiện thường xuyên trong hầu hết văn bản bằng tiếng anh,nếu ký tự
L xuất hiện nhiều nhất trong văn bản mật mã từ đó có thể đoán đc là L đại diện
cho e, với e=4 và L=11 key hợp lý có thể là k=11-4=7. Tuy nhiên với dịch mã
phương pháp này chiếm nhiều thời gian hơn so với tìm kiếm thủ công, bên
cạnh đó nó yêu cần 1 tin nhắn nhiều ký tự để có thể mã hóa được.( anything
short, such as this, might not contain a common symbol, thus changing
sraristical counts(éo hiểu đoạn này nghĩa gì)).
1.2. Biết được văn bản gốc:

Nếu bạn biết chỉ 1 ký tự trong văn bản gốc cùng với 1 ký tự tương ứng
trong văn bản đc mã hóa, bạn có thể suy luận được key của đoạn văn
bản đó. Ví dụ, nếu biết t(=19) mật mã hóa thành D(=3), vậy key sẽ là
k=3-19= -16= +10( mod 26).

1.3. Chọn 1 ký tự trong plaintext(1 hình thức của 1 văn bản mật mã có thể hiểu
được):
Chọn ký tự a(=0) với tư cách là plaintext. Bản mật sẽ cho us khóa. Ví
dụ, nếu trong bản mật là H(=7) thì key là 7.
5


1.4. Chọn 1 ký tự trong ciphertext:

Lựa chọn ký tự A với tư cách là ciphertext . Dựa vào bản gốc sẽ tìm
được key của bản mật . Ví dụ, nếu trong bản gốc tương ứng với A là h
thì key sẽ là -7 = 19(mod 26).

2. Mật mã Affine
Mật mã Affine là một dạng mật mã thay thế dùng một bảng chữ cái, trong đó mỗi chữ
cái được ánh xạ tới một số sau đó mã hóa qua một hàm số toán học đơn giản. Một
phép dịch Caesar là mật mã Afin, trong đó các chữ cái được mã hóa với hàm (x+b)
mod (26), với b là bước dịch.


Mô tả

Trong mật mã Affine, đầu tiên bảng chữ cái của thông điệp cần mã hóa có kích thước
m sẽ được chuyển thành các con số tự nhiên từ 0.. m-1. Sau đó dùng một hàm mô đun
để mã hóa và chuyển thành bản mã.
Hàm mã hóa cho một ký tự như sau:
E(x)=(ax+b) mod m
Với m là kích thước của bảng chữ cái, a và b là khóa mã. Giá trị a được chọn sao cho
a và m là nguyên tố cùng nhau.
• Các cách thám mã

1. Chỉ có bản mã: Trong trường hợp này, người phân tích chỉ có một vài bản tin

của bản mã, tất cả trong số chúng đều đã được mã hoá và cùng sử dụng chung
một thuật toán.
2. Biết bản rõ: Người phân tích không chỉ truy cập được một vài bản mã mặt khác
còn biết được bản rõ.
3. Lựa chọn bản rõ: Người phân tích không chỉ truy cập được bản mã và kết hợp
bản rõ cho một vài bản tin, nhưng mặt khác lựa chọn bản rõ đã mã hoá.
4. Lựa chọn bản mã. Người phân tích có thể chọn bản mã khác nhau đã được mã
hoá và truy cập bản rõ đã giải mã.

3. Mật mã Vigenre
Mật mã Vigenre: Một biến đổi của mã dịch được sáng tạo vào thế kỉ 16. Nó
thường được liên tưởng tới Vigenere, dù phương pháp mã hóa của Vigenere là
phức tạp hơn. Trong thế kỷ XX, hệ thống mật mã này được cho là an toàn, mặc dù
Babbage và Kasold đã cho thấy làm thế nào để tấn công nó trong thế kỷ XIX.
Trong những năm 1920, Friedman đã phát triển phương pháp bổ sung để phá vỡ
mật mã này và các mật mã liên quan.
Chìa khóa của mật mã là một vector,đầu tiên chọn chiều dài khóa,rồi chọn vector
có chiều dài đó
Các giá trị là các số nguyên từ 0 đến 25.VD:k=(21,4,2,19,14,17)
6


Để giải mã bản mã,ta lấy chữ cái đầu tiên của bản mã dịch đi 21,chữ cái thứ 2 dịch
đi 4,tương tự đến chữ cái thứ 6 dịch 17,chữ cái thứ 7 dịch 21 …
Cách giải mã:tìm chiều dài khóa và tìm khóa
 Tìm chiều dài khóa:

-Viết bản mã 2 lần song song nhau,lần thứ 2 dịch đi 1 số vị trí so với lần 1(có thể

là chiều dài khóa).VD:dịch 2
VVHQWVVRHMUSGJGTHKIHTSSEJCHLSFCB
V V H Q W V V R H M U S G J G*T H K I H T S S E J C H L S F C B G V
GVWCRLRYQTFSVGAH
W C R L R*Y Q T F S V G A H W K
Đánh dấu mỗi lần trùng kí tự.Từ đó ta có:
Dịch: 1 2

3

4

5

6

Trùng:14 14

16

14

24

12

Ta có dịch 5 là có số kí tự trùng nhiều nhất,đây nhiều khả năng là chiều dài khóa
Giải thích cách tìm chiều dài khóa:

Tần suất xuất hiện các chữ cái tiếng Anh: (theo phần trăm)


Đặt tần suất xuất hiện các chữ cái tiếng Anh vào vector:
A0 = (.082, .015, .028, ..., .020, .001).
Ai là kết quả của việc dịch Ao i khoảng sang bên phải.VD: A2=(.020, .001, .082, .
015,...).
Tích của A0 với chính nó là
A0 * A0 = (.082).2 + (.015).2 + ••• = .066
7


Tương tự tích của Ai với Ai cũng cho kết quả là .066.Tích của Ai và Aj sẽ thấp đi
khi Ai khác Aj
|i-j|

0

1

2

3

4

5

6

Ai*Aj


.066

.039

.032

.034

.044

.033

.036

7 8

9

10

11

12

13

.039

.034


.034

.038

.045

.039

.042

Ai*Ai lớn nhất vì giá trị lớn nhân giá trị lớn,giá trị bé nhân với giá trị bé.
Với i khác j,ví dụ i=0 và j=2
(.082)(.020) + (.015)(.001) + ••• + (,00l)(.001) = A0 * A2.
Khi mã hóa dịch là i và j,khả năng 2 chữ cái giống nhau là Ai * Aj.Nếu i khác j giá
trị thường xấp xỉ 0.038,nếu i=j thì là 0.066.Trong ví dụ trên nếu dịch 5 chữ cái,ta
có 326 phép so sánh và 24 trường hợp trùng.Nếu tính toán như đã nói,ta mong
muốn xấp xỉ 326 x 0.066 = 21.5 trường hợp trùng,gần giống với giá trị thực

 Tìm khóa:
 Phương pháp thứ nhất:Ví dụ ta xác định được chiều dài khóa là 5.Nhìn

vào chữ cái thứ 1,6,11 xem chữ cái nào xuất hiện thường xuyên nhất.Ta có:
Chữ cái
A
Số lần xuất hiện 0

B
0

C

7

D
1

E
1

F
2

G
9

H
0

I
1

J
8

K L

M

N

0


P

Q

R

S

T

U

V

W

8

0

0

3

0

4

5


2

0

3

6

5

1

X Y

Z

0 1

0

Xuất hiện nhiều nhất là G,sau đó đến J,K,C.Nếu J=e thì là dịch 5,khi đó
C=x.Nhưng nó sẽ làm tần suất xuất hiện cao bất thường của x trong bản rõ.Tương
tự,K=e là P=j và Q=k,cả 2 có tần suất quá cao.Nếu C=e thì V=x,không đúng trong
trường hợp này.Từ đo,ta chọn G=e,yếu tố đầu tiên của khóa là 2=c.Làm tương
tự,ta đoán khóa là {2,14,3,4,18} = {c,o,d,e,s}.
 Phương pháp thứ 2:Để tìm yếu tố thứ nhất của khóa,đếm số lần xuất hiện

của chữ cái thứ nhất,thứ 6,11…và đặt chúng vào vector
V = (0,0,7,1,1,2,9,0,1,8,8,0,0,3,0,4,5,2,0,3,6,5,1,0,1,0)

Nếu ta chia cho 67(là tổng số lần xuất hiện),ta có vector
W = (0, 0, .1045, .0149, .0149, .0299,..., .0149, 0)
8


Ta đã biết chiều dài khóa là 5,nên chữ cái thứ 1,6,11.. đều được dịch 1 lương nhất
định.Từ đó chúng như 1 đoạn ngẫu nhiên cùng được dịch 1 đoạn.Tần suất xuất
hiện của chúng,được thể hiện bởi vector W,nên giống với vector Ai,với i
là giá trị dịch bởi chữ cái đầu tiên
Xác định i:Nhắc lại Ai*Aj max khi i=j,và W giống Aj.Nếu ta tính W*Aj với
0=0275, .0380, .0512, .0301, .0325, .0430, .0338, .0299, .0343, .0446, .0356, .0402, .
0434, .0502, .0392, .0296, .0326, .0392, .0366, .0316, .0488, .0349
Gía trị lớn nhất là 0.713 ứng với j=2.Vậy lần dịch đầu tiên là 2.Tương tự ta tìm
được khóa {2,14,3,4,18} = {c,o,d,e,s}.
*Tóm lại,đây là phương pháp tìm khóa,giả sử chiều dài khóa đã biết:
Với i=1 đến n:
1.Tính tần suất xuất hiện của các chữ cái trong các vị trí i mod n,điền vào vector W
2.j=1 đến 25,tính W*Aj
3.Đặt kj=jo cho giá trị cao nhất của W*Aj
Khóa có thể là {k1,…,kn}

4. Mật mã thế
Một trong những hệ mật mã phổ biến nhất là thế mã. Nó đã được sử dụng trong
phần giải đố của 1 tờ báo cuối tuần. Mỗi ký tự trong bản chữ cái đc thay thế bởi các
ký tự khác( hoặc có thể là chính nó). Chính xác hơn, 1 sự hoán vị của bảng chữ cái là
sự lựa chọn và ứng dụng được vào trong văn bản gốc cần mã hóa. Trong trang giải đố,
khoảng cách giữa các từ thường được giữ nguyên, điều này có lợi cho việc giải đố, từ
khi kiến thức của cấu trúc từ trở nên hữu dụng. Tuy nhiên, để tăng độ bảo mật, tốt hơn
hết là bỏ đi khoảng cách giữa các từ. Dịch mã và mã Affine là 1 trường hợp của Thế

mã. Mọi người đều biết rằng thế mã có thể bị bẻ khóa bằng cách đếm tần suất xuất
hiện của các chữ cái. Tuy nhiên, để xử lý chúng có thể phức tạp hơn.
Hãy cùng theo dõi ví dụ sau. Thomas Jefferson muốn gửi 1 tin nhắn bí mật đến
Ben Franklin, dĩ nhiên ông không muốn người anh đọc được nếu họ bắt được. Vì thế
ông đã mã hóa tin nhắn của mình sử dụng thế mã. Thật may là Ben Franklin biết được
cách hoán vị ký tự mà Thomas đã dung, thế nên ông có thể dễ dàng đảo ngược lại quá
trình để thu được đoạn tin nhắn gốc.
Bây giờ giả sử cta đang làm việc cho Government Code và Cypher School ở
anh vào năm 1776 và họ có 1 đoạn mật mã cần phải decode.
LWNSOZBNWVWBAYBNVBSQWVUOHWDIZWRBBNPBPOOUWRPAWXAW
PBWZWMYPOBNPBBNWJPAWWRZSLWZQJBNVIAXAWPBSALIBNXWA
BPIRYRPOIWRPQOWAIENBVBNPBPUSREBNWVWPAWOIHWOIQWAB
9


JPRZBNWFYAVYIBSHNPFFIRWVVBNPBBSVWXYAWBNWVWAIENBV
ESDWARUWRBVPAWIRVBIBYBWZPUSREUWRZWAID IREBHWIATYV
BFSLWAVHASUBNWXSRVWRBSHBOTESDWARWZBNPBLNWWDWAPR
JHSAUSHESDWARUWRBQWXSUWVZWVBAYXBIDWSHBNWVWWRZVIB
IVBNVAIENBSHBNWFWSFOWBSPOBWASABSPQSOIVNIBPRZBSIR
VBIBYBWRWLESDWARUWRBOPJIREIBVHSYRZPBISRSRVYXNFAI
RXIFOOTPRZSAEPRIKIREIBVFSLWAVIRVYXNHSAUPVBSVWMJ
SVBOICWOJBSWHHWXBBNWIAVPHWBJPRZNPFFIRWW
Tần suất xuất hiện của các ký tự trong bản mật trên:
W(76);B(64);R(39);S(36);I(36);V(35);A(34);P(32);N(30);O(16)…
Tần số xuất hiện của các ký tự trong các văn bản bằng tiếng anh:
e(.127);t(.091);a(.082);o(.075);i(.070);n(.067);s(.063);h(.061);r(.060)
Đối chiếu 2 hàng tần suất bên trên ta có thể thấy đc W có thể đại diện cho e(B
cũng có khả năng). Vậy còn những ký tự khác thì sao? Ta có thể đoán rằng
B,R,S,I,V,A,P,N, có thể là t, a,o, i, n, s, h, r hoặc cũng có thể ko phải. Trong trường

hợp không phải thì cần phải tìm ra 1 hoặc 2 sự loại trừ hợp lý. Nhưng chỉ với căn cứ
như trên là chưa đủ để khẳng định cái gì đại diện cho cái gì. Cái ta cần làm bây giờ là
xem bảng tần suất của các ký tự thường xuất hiện trong các văn bản tiếng anh hoặc
xem xét cách trên với 1 cặp ký tự. Kết quả thử với 1 cặp ký tự được thể hiện ở bảng
dưới( ta chi sử dụng 1 vài ký tự có khả năng nhất, nó sẽ hiệu quả hơn là dung tất cả
các ký tự).

Ta có thể khẳng định rằng W=e, nhưng nếu ra mở rộng bảng để bao gồm
những ký tự có tần suất xuất hiện thấp, ta sẽ tháy rằng W sẽ lien hệ với các ký tự khác
ngoài e ra. Sau đây chúng ra sẽ xác nhận lại phán đoán của ta là đúng hay sai.
Các ký tự a,i,o có khuynh hướng phủ định các ký tự còn lại. Nếu ta nhìn vào
dòng ký tự R, ta sẽ thấy rằng R thường xuyên ko đặt trước S,I,A,N. Nhưng nhìn vào
cột R thấy rằng R theo sau S,I,A là khá thường xuyên. Vì thế chúng ta có thể đoán
10


rằng R không thể là a,i,o. V và N cũng loại vì chúng yêu cầu a,i, hoặc o đứng trước
W=e là khá thường xuyên. Sau đây, cta sẽ thấy rằng phù hợp nhất với a,i,o là S,I,P.
Ký tự n thuộc trên dưới 80% của những ký tự mà đứng trước nó là 1 nguyên
âm. Từ việc ta đã thực sự biết rằng W,S,I,P là những nguyên âm, cta có thể thấy rằng
R và A có khả năng là cao nhất. Ta phải đợi để xem trường hợp nào là đúng.
Ký tự h thường xuyên xuất hiện trước e và hiếm khi sau nó. Điều này khẳng
định rằng N=h, 2 ký tự hay đi với nhau nhất là t và h, theo bảng trên thì BN xuất hiện
20 lần, vì vậy B sẽ đại diện cho t.
Trong bảng tần suất xuất hiện trên, còn lại r và s, và chúng có thể bằng V hoặc
A hoặc R. Từ r đứng cặp với nhiều hơn với nguyên âm và s cặp nhiều với phụ âm, ta
thấy răng V phải là s và r được biểu diễn bằng A hoặc R.
Tổ hợp rn xuất hiện nhiều hơn nr, và AR xuất hiện nhiều hơn so với RA, vì thế
nên ta có thể đoán rằng A=r và R=n.
Cta có thể tiếp tục phân tích và xác định rằng S=o, I=i và P=a là sự lựa chọn

hợp lý nhất. Tới thời điểm hiện tại thì ta đã xác định được 382/520 ký tự trong đoạn
tin nhắn.
L

W(e) N(h) S(o)

O

Z

B(t)

N(h) W(e) …

Tại đây, kiến thức về ngôn ngữ học, những ký tự xuất hiện nhiều t2 và khả
năng phán đoán là cần thiết để hoàn thành những ký tự còn lại. Ví dụ, dòng thứ nhất 1
sự lựa chọn hợp lý đó là Y=u từ truths xuất hiện. Tất nhiên sẽ có nhiều khả năng xảy
ra và những giả thuyết đó cần đc kiểm tra cho tới khi tìm đc 1 khả năng đúng nhất.

5. Mật mã Sherlock Holmes
Sherlock Holmes (phát âm tiếng Việt: Sê-lốc Hôm) là một nhân vật thám tử hư cấu
vào cuối thế kỉ 19 và đầu thế kỉ 20, xuất hiện lần đầu trong tác phẩm của nhà văn
Arthur Conan Doyle xuất bản năm 1887. Ông là một thám tử tư ở Luân Đôn nổi tiếng
nhờ trí thông minh, khả năng suy diễn logic và quan sát tinh tường trong khi phá
những vụ án mà cảnh sát phải bó tay. Nhiều người cho rằng Sherlock Holmes là nhân
vật thám tử hư cấu nổi tiếng nhất trong lịch sử văn học và là một trong những nhân vật
văn học được biết đến nhiều nhất trên toàn thế giới.
Suy luận kiểu Holmes
Trong tập Chiếc nhẫn tình cờ, Holmes có viết một tiểu luận theo đó "Từ một giọt
nước, một người suy luận logic có thể nêu được khả năng đó là một giọt nước Đại

Tây Dương hay một giọt nước từ thác Niagara". Những vụ án do Holmes điều tra
thường bắt đầu với việc ông thể hiện khả năng suy luận tuyệt vời của mình như
đoán ra thân thế và nghề nghiệp của khách hàng mà không cần hỏi thông tin từ họ.

11


Phương pháp suy luận của Holmes thường là đi từ những chứng cứ quan sát được
đến ý nghĩa của những chứng cứ đó, tức là "Nếu có A thì có B". Ví dụ trong truyện
ngắn Vụ tai tiếng xứ Bohemia, sau khi nhìn thấy Watson, Holmes suy luận được
rằng ông này mới bị ướt sũng và có một cô hầu gái vụng về và bất cẩn nhất trên
đời, ông giải thích cho lập luận của mình như sau:

Phía bên trong lớp da chiếc giày bên trái của bác sĩ Watson có sáu vết xước gần
như song song. Rõ ràng là những vết xước đó gây ra do một người bất cẩn khi
chà xát xung quanh mép gót giày để lau bùn.
• Người lau giày cho bác sĩ chỉ có thể là người hầu gái của ông.
• Người lau bùn mà để lại những vết xước như vậy hẳn phải là người bất cẩn và
vụng về.
• Đôi giày có nhiều bùn đến mức phải lau như vậy chỉ có thể là người mang nó
vừa phải đi trong thời tiết giá lạnh và ẩm ướt.


Ở đây "A" là những vết xước nhìn thấy trên đôi giày của bác sĩ Watson, còn "B" là
việc ông này bị ướt và người hầu gái bất cẩn.

Sự thành công trong suy luận của Holmes cũng còn do ông có phương pháp nghiên
cứu hiện trường vụ án rất khoa học và cẩn thận, và do ông rất am hiểu những lĩnh
vực liên quan như pháp y hay chất độc. Theo Holmes, những kết luận logic của
ông thực ra là "đơn giản" và "hiển nhiên". Điều quan trọng trong những suy luận

của Holmes là phải triệt tiêu được càng nhiều khả năng xảy ra càng tốt. Bác sĩ
Watson đôi khi cũng thử áp dụng phương pháp này nhưng ông thường sai trong
hầu hết các trường hợp.

6. Mã Playfair và mã ADFGX
Mã Playfair và mã ADFGX đã được người Anh và Đức sử dụng trong thế chiến thứ
nhất. Theo các tiêu chuẩn hiện đại thì cách mã hóa của hai mật mã này không đảm bảo
được độ an toàn, nhưng tại thời điểm đó thì mã hóa theo cách này là rất an toàn.
6.1. Mã Playfair

Hệ thống mã Playfair được phát minh bởi Sir Charles Wheatstone, ông ấy đã sử dụng
tên người bạn của ông ấy để đặt cho nó .Ngoài việc sử dụng nó trong thế chiến 1, quân
đội Anh đã sử dụng nó ở chiến tranh Boer.
Chìa khóa là một từ, ví dụ, playfair. Những kí tự lặp lại nhiều lần thì bỏ đi kí tự xuất
hiện từ lần thứ hai, sẽ được playfir, và những kí tự đó là những kí tự bắt đầu ở ma trận
5x5. Những ô trống còn lại trong ma trận là điền những kí tự còn lại trong bảng chữ
cái theo thứ tự alphabet, i và j sẽ được coi như là một từ. Ma trận đó được sử dụng để
mã hóa.
12


Giả sư bản tin ban rõ là meet at the schoolhouse. Bỏ dấu cách và chia văn bản thành
các nhóm chứa hai kí tự liền nhau. Nếu từ nào xuất hiện liền nhau trong một nhóm,
chèn x và sửa lại nhóm đó. Thêm x tại điểm kết thúc vào nhóm cuối cùng, nếu cần
thiết. Bản tin rõ của chúng ta sẽ trở thành
me et at th es ch ox ol ho us ex
Bây giờ sẽ sử dụng ma trận để mã hóa hai kí tự trong mỗi nhóm theo nguyên lí dưới
đây:
Nếu hai kí tự là không cùng một hàng hoặc một côt, thay thế mỗi kí tự đó bằng
kí tự cùng hàng với kí tự đó và cùng cột với kí tự kia. Ví dụ, et thành MN, do

M là cùng hàng với e và cùng cột với t, và N là cùng hàng với t và cùng cột với
e.
• Nếu hai kí tự đó cùng một hàng, thay thế từng kí tự đó bằng kí tự ngay phía sau
ở bên phải nó, kí tự cuối cùng của hàng được thay bởi kí tự đầu tiên của hàng
đó. Ví dụ, me thành EG.
• Nếu hai kí tự là cùng một cột, thay thế kí tự đó bởi từ ở ngay phía bên dưới nó,
từ cuối cùng của cột sẽ được thay thế bằng từ đầu tiên của cột đó. Ví dụ, ol
thành VR.


Khi đó ta sẽ được bản mã
EG MN FQ QM KN BK SV VR GQ XN KU
Để giải mã, làm ngược lại các bước trên.
Hệ thống không chịu được một cuộc tấn công với tần suất lớn do sự xuất hiện của các
tổ hợp từ khác nhau (tổ hợp hai từ) trong tiếng anh là đã được thống kê.
Tất nhiên, chúng ta chỉ cần tìm kiếm những tổ hợp hay xuất hiện; họ có những mô
hình tương đương cho những từ hay xuất hiện trong tiếng anh: th, he, an, in, re, es,…
Hơn nữa, sửa đổi một chút trong thống kê đó sẽ cho kết quả nhanh hơn. Ví dụ, hai tổ
hợp re và er là rất giống nhau. Nếu cặp đôi IG và GI cùng có trong bản tin mã hóa, thì
đó là một gợi ý tốt rằng e, i, r, g là các góc của một hình chữ nhật trong ma trận. Một
điểm yếu khác là mỗi từ rõ là chỉ có 5 khả năng từ mã tương ứng. Do đó, trừ khi từ
13


khóa là dài, một vài hàng của ma trận là có thể xác định. Việc quan sát như thế này
cho phép phá vỡ hệ thống mật mã chỉ với tấn công từ một bản tin mã hóa.
6.2. Mật mã ADFGX

Mã ADFGX được tạo thành như sau. Đặt các kí tự của bảng chữ cái vào ma trận 5x5.
Từ i và j coi như là một, cột của ma trận được kí hiệu bởi các từ A, D, F, G, X. Ví dụ,

ma trận có thể là

Mỗi kí tự ban đầu là được thay thế bằng kí hiệu ở hàng và cột của nó. Ví dụ, s thành
FA, và z thành DG. Giả sử bản tin rõ là
Kaiser Wilhelm.
Kết quả sau khi thực hiện bước này là
XA FF GG FA AG DX GX GG FD XX AG FD GA.
Cho đến đây, bản rõ đã được mã hóa. Bước tiếp theo là tăng thêm độ phức tạp. Chọn
một từ khóa, ví dụ, Rhein. Kí hiệu các cột của ma trận bằng các kí tự của từ khóa và
đặt kết quả của bước trước đó vào ma trận này:

Bây giờ đặt lại các cột sao cho các kí hiệu được sắp xếp theo thứ tự trong bảng chữ cái
sẽ được:

14


Cuối cùng, bản tin mã hóa thu được bằng cách đọc từ trên xuống dưới các hàng( bỏ
qua các kí hiệu) theo thứ tự:

Giải mã là rất dễ, miễn là bạn biết từ khóa. Từ độ dài của từ khóa và độ dài của bản
mã, độ dài của mỗi cột là được xác định. Các kí tự được đặt vào các cột, các cột được
đặt lại theo từ khóa. Sử dụng ma trận ban đầu khi đó sẽ khôi phục được bản tin rõ.
Ma trận ban đầu và từ khóa là thường xuyên thay đổi, gây ra khó khăn rất lớn cho
phân tích mật mã, do đó mà chỉ có một số lượng hạn chế bản mã có sẵn cho bất kỳ tổ
hợp nào. Tuy nhiên, hệ thống đã bị tấn công thành công bởi nhà thám mã người Pháp
Georges Painvin, người đã giải mã một số lượng lớn bản tin thực tế.
Đã có một kĩ thuật được sử dụng ở đây. Giả sử biết được một vài kí tự ban đầu giống
nhau từ hai bản mã. Thì một phỏng đoán hợp lí về hai bản rõ sẽ cho phép tìm được
một vài kí tự. Điều này có ý nghĩa rằng một vài từ hay xuất hiện ở trong các cột của

trong một văn bản là giống với những bản khác. Nghiên cứu các bản mã và tìm ở
những nơi được phép. Những từ này có thể sẽ là bắt đầu của các cột. Nếu điều này là
đúng, chúng ta sẽ biết được số cột của ma trận. Chia các kí tự của bản mã ma trận dựa
trên số cột của ma trận. Cho bản mã hóa thứ nhất, một vài cột sẽ có một độ dài nhất
định và những cột khác có thể ngắn hơn. Những cột ngắn hơn sẽ là cột bắt đầu, những
cột còn lại là ở cuối cùng. Lặp lại với bản mã thứ hai. Nếu cột dài ở chung ở cả hai
bản mã, nó là cột bắt đầu. Nếu cột dài ở một bản mã và không có ở bản khác, nó là
gần ở giữa. Nếu cột ngắn ở cả hai bản mã, nó là cột ở phía cuối. Đến thời điểm này,
thử một vài từ vào cột, nhưng chỉ một số kí tự hạn chế. Những kí tự này có khả năng
đúng rất cao.
Mã ADFGX là được chọn bởi những kí hiệu mã Morse là rất khó sử dụng. Cuối cùng,
mã ADFGX là được thay thế bằng mã ADFGVX, nó sử dụng ma trân 6 x 6. Cho phép
sử dụng tất cả các kí tự và các số.

7. Block Ciphers
Trong những hệ thống mật mã đã kể trên, khi thay đổi một từ trong bản rõ sẽ chỉ chính
xác một kí tự trong bản mã thay đổi. Trong mã dịch, Affine, và mã thế, một kí tự
trong bản mã thường có chính xác một kí tự trong bản rõ. Điều này rất dễ cho việc tìm
khóa sử dụng phân tích tần số xuất hiện. Trong hệ thống Vigenere, sử dụng một khối
15


kí tự, tương ứng với độ dài của từ khóa, tạo ra nhiều khó khăn khi phân tích tần số
xuất hiện, nhưng vẫn có thể, vì không có sự tương tác trong mỗi khối. Mã khối tránh
những vấn đề này bằng cách mã hóa từng khối của một vài kí tự hoặc số một cách
đồng loạt. Một sự thay đổi của một ký tự trong khối kí tự ban đầu có khả năng làm
thay đổi toàn bộ các kí tự trong khối kí tự mã tương ứng.
Mã Playfair trong mục 2.6 là một ví dụ đơn giản của mã khối, do nó là khối chứa hai
kí tự và mã hóa chúng thành những khối chứa hai kí tự. Một sự thay đổi của một kí tự
trong cặp đôi ban đầu luôn tạo ra sự thay đổi tại ít nhất một kí tự, và thông thường là

cả hai, của cặp đôi kí tự mã. Tuy nhiên, khối của hai kí tự là có độ an toàn rất thấp, và
khi thực hiện phân tích tần suất, là thường thành công.
Những hệ thống mã hóa hiện đại được xem xét sau này là mã khối. Ví dụ, DES hoạt
động dựa trên mã khối 64 bit. AES là sử dụng mã khối 128 bit. RSA là sử dụng khối
có độ dài vài trăm bit, độ dài của mã phụ thuộc vào modul sử dụng. Tất cả những khối
này là đủ dài để đảm bảo an toàn trước các cuộc tấn công qua cách phân tích tần suất.
Cách thông thường để sử dụng mã khối là chuyển những khối của bản tin rõ sang bản
tin mã, độc lập và tại một thời điểm. Cái này được gọi là chế độ electronic codebook.
Tuy nhiên, có cách sử dụng khác là liên hệ ngược từ những khối mã đã được mã hóa
đến những khối của bản tin rõ. Điều này chế độ mã hóa khối chuỗi (CBC) và chế độ
hoạt động mã hóa ngược.
Trong mục này, chúng ta thảo luận về mã Hill là mã khối được phát minh vào năm
1929 bởi Lester Hill. Nó dường như là không được ứng dụng trong thực tế nhưng nó
có ý nghĩa quan trọng là rằng nó là có thể là mã đầu tiên sử dụng phương pháp đại số
(đại số tuyến tính, số học modula), một phương pháp quan trọng trọng mật mã. Về
việc đó chúng ta sẽ xem xét ở chương sau, phương pháp đại số bây giờ chiếm giữ vị
trí trung tâm trong vấn đề này.
Chọn một số nguyên n, ví dụ n=3. Khóa là một ma trận M có kích cỡ n x n. Ví dụ,

Văn bản là được viết thành một dãy trong các vector hàng. Ví dụ, nếu văn bản là abc,
chúng ta sẽ thay đổi chúng thành một vector hàng (0, 1, 2). Để mã hóa, nhân vector
với ma trận (theo truyền thống, ma trận là ở bên phải của phép nhân) và chia cho 26:

Bởi vậy, bản mã là AXW(Thực tế là các từ đầu tiên không thay đổi là ngẫu nhiên,
không phải một điểm yếu của phương pháp này).
16


Để giải mã, chúng ta cần xác định ma trận M thỏa mãn


Điều này có ý nghĩa là một ma trận N với số nguyên ban đầu thỏa mãn MN=I(mod
26), ma trận I là ma trận đơn vị.
Ví dụ, det(M)=-3. Ma trận đảo của M là

Vì 17 là đảo của -3 mod 26, thay -1/3 bằng 17 và chia lấy phần dư cho 26 ta được

Người đọc có thể kiểm tra lại MN=I(mod 26).
Để giải mã ta nhân với ma trận N, như sau:

Phương pháp tổng quát với ma trận n x n, chuyển bản tin rõ thành các khối n kí tự và
thay đổi mỗi khối đó sang một vector chứa n số nguyên từ 0 tới 25 bằng cách chuyển
từ a = 0, b = 1, …, z = 25. Ví dụ, với ma trận M ở trên, giả thiết bản tin rõ là
Blockcipher.
Bản tin rõ này trở thành( chúng ta điền thêm từ x vào khoảng trống cuối cùng).

Bây giờ nhân mỗi vec tơ với ma trận M,lấy kết quả là phần dư của phép chia cho 26,
và đổi về kí tự

Bản tin mã là
RBZMUEPYONOM
17


Nó là dễ dàng để quan sát khi thay đổi một bản tin rõ là thông thường sẽ thay đổi n kí
tự của bản tin mật mã. Ví dụ, nếu block là được thay bằng clock, đầu tiên ba kí tự của
bản tin mã hóa thay đổi từ RBZ thành SDC. Điều này khiến cho việc đếm tần suất
xuất hiện là rất kém hiệu quả, nhưng vẫn có thể khi n là nhỏ. Tần suất của một tổ hợp
2 từ, gọi là digrams, và tổ hợp ba từ gọi là trigrams, có thể tính toán được. Ngoài ra, số
lượng các tổ hợp là rất lớn (thông qua thống kê cho kết quả cho thấy các tổ hợp giống
nhau đã biêt sẽ là rất khác nhau). Do vậy, tần số xuất hiện của các tổ hợp là rất thấp và

rất khó để có được dữ liệu có ý nghĩa mà không có một lượng lớn văn bản.
Bây giờ chúng ta có bản tin mã hóa, làm thế nào để chúng ta giải mã? Đơn giản là
chuyển bản tin mã hóa vào các khối có độ dài n, đổi mỗi một vector, và nhân chúng
với ma trận đảo N. Ví dụ, chúng ta có

Và tương tự cho phần còn lại của bản mã.
Mã Hill là rất khó để giải mã mà chỉ sử dụng bản mã, nhưng nó dễ dàng nếu tấn công
từ bản rõ đã biết. Nếu chúng ta không biết n, chúng ta có thể thử một vài giá trị khác
nhau cho đến khi tìm được một giá trị đúng. Giả sử chúng ta là đã biết n. Nếu chúng ta
có n của khối của bản tin rõ có kích thước n, thì chúng ta có thể sử dụng bản rõ và bản
mã tương ứng để được ma trận kết quả M (hoặc N, nó là rất có ích). Ví dụ, giả sử
chúng ta biết n=2 và chúng ta có bản rõ

tương ứng ta có bản mã

Hai khối của ma trận cho kết quả

Thật không may, ma trận
có định thức là -308, nó là không có phần tử
đảo. Vì đó, chúng ta phải thay thế của kết quả, ví dụ, bằng khối thứ 5 ta được

18


Trong trường hợp này, ma trân
26:

có thể nghịch đảo cho rồi chia lấy dư cho

Chúng ta được


Chọn tấn công vào bản mã bằng cách tương tự, nhưng là phải thực hiện nhanh chóng.
Nhắc lại, nếu bạn không biết n, thử một vài khả năng cho đến khi một khả năng làm
việc. Giả sử là biết n. Chọn khối đầu tiên của bản tin rõ là baaa…=1000…, khối thứ
hai là abaa…=0100…, và tiếp tục khi đến khối thứ n là …aaab=…0001. Các khối của
bản tin mã hóa sẽ trở thành các cột của ma trận M.
Chọn cách chọn tấn công vào bản mã, sử dụng phương pháp giống như chọn bản
rõ,các vị trí lựa trọn của bản tin rõ bây giờ biểu diễn bản tin mã. Kết quả của bản tin rõ
là ở trong các hàng của ma trận đảo N.
Claude Shannon, trong một bài luận văn mang tính lí thuyết cơ bản về nền tảng của
mật mã học, đã đưa ra hai đặc tính tốt của hệ thống mật mã nên có để ngăn chặn phân
tích thống kê: làm tán xạ và làm rối loạn.
Làm tán xạ mang ý nghĩa rằng nếu chúng ta thay đổi các kí tự ở bản tin rõ, thì một vài
kí tự của bản mã sẽ thay đổi, và, tương tự, nếu chúng ta thay đổi một kí tự ở bản mã,
thì một vài kí tự của bản tin rõ sẽ thay đổi. Chúng ta thấy rằng mã Hill là có thuộc tính
này. Điều đó có ý nghĩa rằng thống kê tần suất của các từ, các mô hình, … trong bản
tin rõ cho ra rất nhiều các kí tự trong bản tin mã, nó còn có ý nghĩa rằng phải cần rất
nhiều bản tin mã để làm một thống kê có ý nghĩa để tấn công.
Làm rối loạn mang ý nghĩa rằng từ khóa là không có liên quan một cách đơn giản tới
bản tin mã. Trong thực tế, mỗi kí tự của bản mã sẽ phụ thuộc vào một vài phần của
khóa. Ví dụ, giả thiết chúng ta có một mã Hill với ma trận n x n, và giả thiết chúng ta
có một cặp đôi bản rõ – bản mã có chiều dài nxn với nó chúng ta có thể biết cách mã
hóa ma trận. Nếu chúng ta thay đổi một kí tự của bản mã, một cột của ma trận có thể
thay đổi hoàn toàn. Tất nhiên, nó sẽ có thể dẫn đến sự thay đổi khóa ban đầu. Khi điều
này xảy ra, người phân tích mật mã cần có khả năng giải quyết đồng thời khóa ban
đầu nữa, còn hơn là làm từng phần một.
Mã Vigenere và mã thế là không có thuộc tính tán xạ và rối loạn, nó giải thích tại sao
họ dễ phân tích tần suất xuất hiện.
19



Khái niệm của làm tán xạ và làm rối loạn là có vai trò quan trọng trong thiết kế một
mã khối tốt. Tất nhiên, một nhược điểm (nó chính xác là một lợi thế của mật mã) của
tán xạ là sự lan truyền lỗi: Một lỗi nhỏ của bản mã sẽ thành lỗi chính trong quá trình
giải mã văn bản, và thông thường là kết quả giải mã sẽ sai.

8. Số nhị phân và mã ASCII
Trong nhiều trường hợp liên quan đến máy tính,sẽ thuận tiện hơn nếu biểu diễn dữ
liệu dưới dạng dãy 0 và 1 hơn là chữ cái và số.Số có thể chuyển sang dạng nhị
phân.Mỗi 0 hay 1 được gọi là 1 bit,8 bit là 1 byte.Thông thường ta muốn xử lý với
nhiều thứ hơn số,như là từ ngữ,biểu tượng,chữ cái,số theo dang nhị phân.Một cách
tiêu chuẩn là dùng mã ASCII,viết tắt của American Standard Code for Information
Interchange.Mỗi kí tự được biểu diễn qua 7 bit,có thể biễu diễn 128 kí tự.Bit thứ 8
dùng để kiểm tra sự tương thích nếu xảy ra lỗi trong truyền dẫn,hay được dùng để mở
rộng danh sách kí tự có chứa biểu tượng

20


Bảng mã ASCII

9. Mật mã dùng một lần
Mật mã dùng 1 lần,là hệ thống mã hóa không thể giải mã,được cung cấp bởi Gilbert
Vernam and Joseph Mauborgne around 1918.Bản tin được biểu diễn dưới dạng dãy 0
và 1,có được biểu diễn dưới mã ASCII.Bản tin cũng có thể là 1 video số hóa hoặc file
âm thanh.Khóa là dãy ngẫu nhiên của 0 và 1 có cùng chiều dài với bản tin.Một khi
khóa được sử dụng,nó sẽ không bao giờ được dùng nữa.Để mã hóa,ta dùng phép
XOR.Ví dụ:
Bản rõ:
Khóa

Bản mã

00101001
+10101100
10000101
21


Giải mã dùng khóa tương tự 10000101 + 10101100 = 00101001
Một kiểu biến đổi là để bản rõ là dãy chữ cái,khóa là dãy ngẫu nhiên các phép dịch,từ
1 đến 25.Phương pháp mã hóa này là không thể giải mã nếu chỉ biết bản mã.Bản mã
không cho thông tin gì về khóa trừ chiều dài của nó
Nếu ta biết 1 phần của bản rõ,ta có thể tìm phần đối xứng của khóa,nhưng ta không
biết phần còn lại của khóa là gì.Trong đa số trường hợp một giải mã bằng 1 bản mã
hoặc bản rõ được chọn là không thể vì như thế chỉ tìm được 1 phần của khóa,không có
tác dụng khi khóa chỉ dùng 1 lần.
Không dễ để tạo ra 1 dãy 0 và 1 ngẫu nhiên thực sự.Có một cách có tốc độ tạo nhanh
nhưng không ngẫu nhiên thực sự sẽ được đề cập ở mục 10.Một điều bất lợi của mã
hóa dùng 1 lần là nó cần 1 khóa rất dài,dẫn đến tốn kém để tạo ra truyền đi.Theo các
nguồn tin thì “đường dây nóng” giữa Washington D.C và Moscow dùng mã hóa 1 lần
để bảo vệ thông tin trao đổi giữa các nhà lãnh đâọ trong chiến tranh lạnh.Một khi khóa
được dùng,rất nguy hiểm để sử dụng lại ở bản tin tiếp theo,mọi thông tin có được từ
bản tin thứ nhất sẽ được dùng để tìm hiểu bản tin thứ 2.Vì thế,ở đa số trường hợp,một
số phương pháp được dùng khi đầu vào nhỏ có thể ra dãy 0,1 ngẫu nhiên hợp lý,dẫn
đến phương pháp gần giống với mã hóa dùng 1 lần.Một lượng thông tin sẽ được
truyền đi nhanh dưới 1 số phần nhỏ hơn bản tin cần gửi.Một phương pháp như thế sẽ
được mô tả ở phần 11.

10. Tạo bit giả ngẫu nhiên
Những ứng dụng mã hóa khác yêu cầu sự phối hợp một cách ngẫu nhiên các bit.

Trước khi chúng ta sử dụng thuật toán mã hóa, như là DES (Chương 4) hoặc AES
(Chương 5), nó là cần thiết khi tạo ra một sự phối hợp ngẫu nhiên giữa các bit để sử
dụng như một khóa.
Một cách để tạo ra ngẫu nhiên các bit là sử dụng các hiện tượng xuất hiện ngẫu nhiên
trong thực tế. Ví dụ, nhiệt độ tỏa ra từ điện trở bán dẫn là đã biết có thể là một sự ngẫu
nhiên tốt để sử dụng. Tuy nhiên, việc tung đồng xu để tạo ra một dãy bít ngẫu nhiên sẽ
là không thực tế bởi nó rất chậm để xử lí lấy mẫu và không đảm bảo rằng kẻ thù
không thể quan sát được quá trình đó. Do đó việc tạo ngẫu nhiên có thể làm trong
phần mềm. Nhiều máy tính có một phương pháp cho tạo các số ngẫu nhiên có sẵn cho
người sử dụng. Ví dụ, thư viện chuẩn của C chứa một hàm rand() cho phép tạo ra một
số ngẫu nhiên từ 0 đến 65535. Hàm giả ngẫu nhiên lấy một số như đầu vào và xuất ra
một luồng bit.
Hàm rand() và nhiều cách tạo số giả ngẫu nhiên khác cơ bản được tạo ra từ một biểu
thức tuyến tính. Một biểu thức tuyến tính tạo ra tuần tự các số x1, x2, …, từ

22


Số x0 là số ban đầu, trong khi đó các số a, b, và m là các thông số điều chỉnh sự liên
quan. Sử dụng cách tạo số giả ngẫu nhiên cơ bản trên các biểu thức tuyến tính phù
hợp với mục đích thí nghiệm, nhưng rất tồi cho mục đích mật mã. Điều này là bởi vì
họ là có thể đoán trước ( cho dù nếu các thông số a, b, và m là không biết), trong khả
năng phán đoán của người trộm thông tin có thể sử dụng một vài bit đã biết để đoán
trước những bit còn lại với xác xuất rất cao. Thực tê, tạo ra nó từ một vài biểu thức đa
thức là không an toàn.
Trong ứng dụng mật mã, chúng ta cần những nguồn tạo ra các bit là không thể đoán
trước được. Bây giờ chúng ta thảo luận hai cách tạo ra các bit không đoán trước được.
Phương pháp đầu tiên sử dụng hàm một chiều. Những hàm f(x) là dễ tính toán nhưng
rất khó để giải quyết hàm một chiều y=f(x). Giả sử rằng chúng ta có hàm một chiều f
và một số ngẫu nhiên s. Định nghĩa xj=f(s+j) với j=1, 2, 3… Nếu chúng ta coi bj là bit

ít quan trọng, thì dãy b0, b1 … sẽ là một dãy giả ngẫu nhiên của các bit. Phương pháp
tạo bit ngẫu nhiên này là thường được sử dụng, và đã chứng minh là rất thực tiễn.
Hàm một chiều là sự lựa chọn chính cho hai phương pháp DES và Secure Hash
Algorithm. Như một ví dụ, mật mã tạo số giả ngẫu nhiên trong công cụ OpenSSL (sử
dụng cho an toàn thông tin trong Internet) là căn bản trên SHA.
Một phương pháp tạo các bit giả ngẫu nhiên khác là sử dụng lý thuyết số học . Một
cách rất đảm bảo tính an toàn cho các bit được tạo giả ngẫu nhiên là tạo bit giả ngẫu
nhiên bằng máy Blum-Blum-Shub (BBS). Đầu tiên tạo ra hai số p và q lớn mà cả hai
cùng chia cho 3 dư 4. Chúng ta dặt n=pq và chọn ngẫu nhiên số nguyên x mà có mối
liên hệ cơ bản với n. Để chuẩn bị, đặt cho số ban đầu x0=x*x(modn). Nó sẽ tạo ra một
dãy bit ngẫu nhiên cho bj,

23


Lấy bit quan trọng nhất từ mỗi số này, việc này rất dễ dàng làm được bằng cách kiểm
tra số đó chẵn hay lẻ, khi đó tạo ra một chuỗi b1, b2, …, b8= 0, 1, 1, 1, 0, 0, 0, 0.
Máy sinh mã này là rất khó để đoán trước được. Một vấn đề với BBS là nó có thể tính
toán rất chậm. Có một cách để tăng tốc độ tính toán ta chỉ lấy k bít quan trọng nhất
của xj. Sao cho k, vẫn đủ để đảm bảo độ an toàn.

11. Dãy thanh ghi dịch phản hồi tuyến tính:
Note: Trong phần này, toàn bộ phù hợp với mod 2.
Trong nhiều trường hợp đòi hỏi phải mật mã hóa, có 1 sự thỏa hiệp ngầm giữa
tốc độ và độ bảo mật. Nếu ai đó muốn độ bảo mật cao, sẽ cần phải hy sinh tốc độ, và
ngược lại. Đơn cử như dây kết nối ti-vi, nhiều bits dữ liệu đc truyền qua nó, vì thế sự
bảo mật được ưu tiên. Bên cạnh đó, độ bảo mật ko thường ko được xem trọng vì độ
bảo mật tăng cũng có nghĩa là giá thành tăng lên.
24



Trong phần này, ta sẽ diễn tả 1 cách thức có thể đc sử dụng khi tốc độ quan
trọng hơn độ bảo mật.
Cho dãy sau:
01000010010110011111000110111010100001001011001111
Có thể được biểu diễn bằng cách gán cho các biến ban đầu: ,,,,; và có 1 mối quan hệ
tuyến tính (mod 2)
Dãy số này lặp lại 31 lần.
Đơn giản hơn, xem xét 1 một mối quan hệ tuyến tính của chiều dài m:
(mod 2)
Ở đây các hệ số là số nguyên. Nếu cta chỉ rõ biến khởi tạo ban đầu và tát cả
những biến sau của có thể được tính toán sử dụng phép truy toán. Kết quả của dãy số
0s và 1s được sử dụng như chìa khóa cho bản mật mã. Theo đó, viết một plaintext như
1 dãy số 0s và 1s, và add 1 dãy bits phù hợp của dãy key vào bản rõ mod 2, bit với bit.
Ví dụ, nếu ta có Plaintext là 1011001110001111 và dãy key ở ví dụ trước, ta có:
(Plaintext) 1011001110001111
(Key) + 0100001001011001
(Ciphertext) 1111000111010110
Giải mã được thực hiện bằng các add dãy khóa vào ciphertext cũng theo cách
trên.
Một điều thuận lợi của phương pháp này là để tạo ra 1 key với chu kỳ lớn sử
dụng rất ít thông tin. Chu kỳ lớn sẽ giúp khắc phục những nhược điểm của phương
pháp Vigenere, ta sẽ tìm được key của bản mật nếu trường hợp chu kỳ ngắn. Trong ví
dụ bên trên, ghi rõ vector khởi tạo là {0,1,0,0,0} và hệ số {1,0,1,0,0} mang lại 1 dãy
có chu kỳ 31, vì thế 10 bits đã đc sử dụng để tạo ra 31 bits. Nó có thể đc biểu diễn
dạng truy hồi toán học : .
Và bất cứ vector khởi tạo khác 0 sẽ tạo ra 1 dãy có chu kỳ =2147483647. Theo
đó, 62 bits tạo ra nhiều hơn 2 tỉ bits key. Điều này là 1 lợi thế tuyệt vời trên 1 onetime pad.
Phương pháp này đc thực hiện rất dễ dàng trong phần cứng sử dụng cái
mà gọi là 1 Linear Feedback Shift Register (LFSR) và nó rất nhanh. Trong hình 2,1 ta

có 1 ví dụ của Linear Feetback Shift Register trong trường hợp đơn giản. Nhiều phép
truy hồi phức tạp đc sử dụng nhiều thanh ghi hơn và nhiều XORs hơn.

25


×