1. Mã hoá dòng Định nghĩa: Cho K là một không gian khóa của một hệ mã và là một dòng khóa. Hệ mã này gọi là mã dòng nếu việc mã hóa trên chuỗi bản rõ bằng cách áp dụng lặp đi lặp lại của phép mã hóa trên những đơn vị thông điệp bản rõ. Mã dòng có các đặc tính sau:+ Kích thước một đơn vị mã hóa: gồm k bít. Bản rõ được chia thành các đơn vị mã hóa: P → p0p1p2...pn1 (pi: k bit)+ Một bộ sinh dãy số ngẫu nhiên: dùng một khóa K ban đầu để sinh ra các số ngẫu nhiên có kích thước bằng kích thước đơn vị mã hóa:StreamCipher(K) → S = s0s1s2...sn1 (si: k bit)+ Mỗi số ngẫu nhiên được XOR với đơn vị mã hóa của bản rõ để có đượcbản mã.c0 = p0 s0, c1 = p1 s1...; C = c0c1c2...cn1 Ứng dụng của mã hoá dòng trong thực tế:+ Dùng trong mạng GSM để bảo mật dữ liệu trong quá trình liên lạc giữa máy điện thoại và trạm thu phát sóng vô tuyến.+ Ứng dụng trong WEP, WPA, cung cấp bảo mật cho dữ liệu trên mạng không dây.2. AES: Cơ sở toán học, các bước xử líCơ sở toán học của AES: trong AES các phép toán cộng và nhân được thực hiện trên các byte trong trường hữu hạn GF(28)Phép cộng: A = (a1 a2 a3 a4 a5 a6 a7 a8); B = (b1 b2 b3 b4 b5 b6 b7 b8)C = A + B = (c1 c2 c3 c4 c5 c6 c7 c8), trong đó: Ci = ai+bi mod 2, 1 ≤ i ≤ 8.Phép nhân: Phép nhân được thực hiện trên GF(28) bằng cách nhân hai đa thức rút gọn theo mođulo của một đa thức bất khả quy m(x) = x8 + x4 + x3 + x +1.Các bước xử lí chính:•SubBytes: thay thế phi tuyến tính, trong đó mỗi byte trong state được thay thế bằng một byte khác sử dụng bảng tham chiếu;•ShiftRows: bước đổi chỗ, trong đó mỗi dòng trong state được dịch một số bước theo chu kỳ;•MixColumns: trộn các cột trong state, kết hợp 4 bytes trong mỗi cột.•AddRoundKey. Bước SubBytes: Mỗi byte trong ma trận state được thay thế bởi 1 byte trong Rijndael Sbox, hay bij = S(aij)
Trang 11
1 Mã hoá dòng
- Định nghĩa: Cho K là một không gian khóa của một hệ mã và k1k2 K
là một dòng khóa Hệ mã này gọi là mã dòng nếu việc mã hóa trên chuỗi bản rõ
2
1m
m bằng cách áp dụng lặp đi lặp lại của phép mã hóa trên những đơn vị thông điệp bản rõ
- Mã dòng có các đặc tính sau:
+ Kích thước một đơn vị mã hóa: gồm k bít Bản rõ được chia thành các
đơn vị mã hóa: P → p0p1p2 pn-1 (pi: k bit)
+ Một bộ sinh dãy số ngẫu nhiên: dùng một khóa K ban đầu để sinh ra các
số ngẫu nhiên có kích thước bằng kích thước đơn vị mã hóa:
StreamCipher(K) → S = s0s1s2 sn-1 (si: k bit)
+ Mỗi số ngẫu nhiên được XOR với đơn vị mã hóa của bản rõ để có được bản mã
c0 = p0 s0, c1 = p1 s1 ; C = c0c1c2 cn-1
- Ứng dụng của mã hoá dòng trong thực tế:
+ Dùng trong mạng GSM để bảo mật dữ liệu trong quá trình liên lạc giữa máy điện thoại và trạm thu phát sóng vô tuyến
+ Ứng dụng trong WEP, WPA, cung cấp bảo mật cho dữ liệu trên mạng không dây
2 AES: Cơ sở toán học, các bước xử lí
Cơ sở toán học
của AES: trong AES các phép toán cộng và nhân được thực hiện trên các byte trong trường hữu hạn GF(28)
Phép cộng:
A = (a1 a2 a3 a4 a5 a6 a7 a8); B = (b1 b2 b3 b4 b5 b6 b7 b8)
C = A + B = (c1 c2 c3 c4 c5 c6 c7 c8),
trong đó: Ci = ai+bi mod 2, 1 ≤ i ≤ 8
Phép nhân: Phép nhân được thực hiện trên GF(28) bằng cách nhân hai đa thức rút gọn theo mođulo của một đa thức bất khả quy m(x) = x8 + x4 + x3 + x +1
Các bước xử lí chính:
SubBytes: thay thế phi tuyến tính, trong đó mỗi byte trong state được thay
thế bằng một byte khác sử dụng bảng tham chiếu;
ShiftRows: bước đổi chỗ, trong đó mỗi dòng trong state được dịch một số
bước theo chu kỳ;
MixColumns: trộn các cột trong state, kết hợp 4 bytes trong mỗi cột
AddRoundKey
- Bước SubBytes: Mỗi byte trong ma trận state được thay thế bởi 1 byte trong Rijndael S-box, hay bij = S(aij)
Trang 22
- Bước ShiftRows: Các dòng của ma trận state được dịch theo chu kỳ sang trái, Dòng thứ nhất giữ nguyên
- Bước MixColumns: Mỗi cột của ma trận state được nhân với một đa thức c(x)
- Bước AddRoundKey: Mỗi byte của ma trận state được kết hợp với một byte của khóa phụ sử dụng phép (XOR)
Trang 33
3 Hàm băm
- Định nghĩa: là các thuật toán không sử dụng khóa để mã hóa , nhiệm vụ “lọc”
(băm) thông điệp được đưa vào theo thuật toán h một chiều nào đó, rồi đưa ra
một bản băm -có kích thước cố định Do đó người nhận không biết được nội dung hay độ dài ban đầu của thông điệp đã được băm bằng hàm băm
Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội dung
thông điệp từ giá trị băm này
- Hàm băm không khóa
+ ĐN 1:Mật mã khối (n, r) là một mã khối xác định một hàm khả nghịch từ các bản rõ n bit sang các bản mã n bit bằng cách sử dụng một khoá r bit Nếu E là một phép mã hoá như vậy thì E k (x) ký hiệu cho phép mã hoá x bằng khoá k
+ ĐN 2: Cho h là một hàm băm có lặp được xây dựng từ một mật mã khối với hàm nén thực hiện s phép mã hoá khối để xử lý từng khối bản tin n bit Khi đó tốc độ của h là 1/s
- Hàm băm có khóa: là các hàm băm được sử dụng để xác thực thông báo và
thường được gọi là các thuật toán tạo mã xác thực thông báo (MAC)
- Đặc trưng:
Plaintext x thu được bản băm z = h(x) là duy nhất
khó tìm được 2 thông điệp trùng giá trị băm
Dễ dàng tính giá trị băm, nhưng khôi phục thông điệp từ giá trị băm rất khó khăn
- Tính chất:
Tính không va chạm yếu: cho trước một bức điện x, không thể tiến hành
về mặt tính toán để tìm ra một bức điện x’ x mà h(x’) = h(x)
Tính không va chạm mạnh: không có khả năng tính toán để tìm ra hai bức thông điệp x và x’ mà x x’ và h(x) = h(x’)
Tính một chiều: cho trước một bản tóm lược thông báo z, không thể thực
hiện về mặt tính toán để tìm ra thông điệp ban đầu x sao cho h(x) = z
4 Hoạt động của Kerberos
AS = (authentication server), TGS = (ticket granting server), SS =(service server)
1 user nhập tên (ID) và mật khẩu tại máy tính của mình (máy khách)
2 software máy khách thực hiện hàm băm một chiều trên mật khẩu nhận được Kết quả dùng làm khóa bí mật của người sử dụng
3.soft máy khách gửi một gói tin (không mật mã hóa) tới AS để yêu cầu dịch vụ Nội dung của gói tin đại ý: "user x muốn sd dv " chú ý private key and pass không send toAS
4 AS check định danh người yêu cầu có nằm trong CSDL của mình không Nếu
có gửi 2 gói tin to user :
Trang 44
Gói tin A: "Khóa phiên TGS/máy khách" được mật mã hóa với khóa bí mật của người sử dụng
Gói tin B: "Vé chấp thuận" (bao gồm chỉ danh người sử dụng (ID), địa chỉ mạng của người sử dụng, thời hạn của vé và "Khóa phiên TGS/máy khách") được mật
mã hóa với khóa bí mật của TGS
5 Khi nhận đc , soft máy khách giải mã gói tin A để có khóa phiên với TGS (Người sử dụng không thể giải mã được gói tin B vì nó được mã hóa với khóa bí mật của TGS) So, user có thể nhận thực mình với TGS
6 user dụng gửi 2 gói tin sau tới TGS:
Gói tin C: Bao gồm "Vé chấp thuận" từ gói tin B và chỉ danh (ID) của yêu cầu dịch vụ
Gói tin D: Phần nhận thực (bao gồm chỉ danh người sử dụng và thời điểm yêu cầu), mật mã hóa với "Khóa phiên TGS/máy khách"
7 Khi nhận được 2 gói tin C và D, TGS giải mã D rồi gửi 2 gói tin sau tới người
sử dụng:
-Gói tin E: "Vé" (bao gồm chỉ danh người sử dụng, địa chỉ mạng người sử dụng, thời hạn sử dụng và "Khóa phiên máy chủ/máy khách") mật mã hóa với khóa bí mật của máy chủ cung cấp dịch vụ
-Gói tin F: "Khóa phiên máy chủ/máy khách" mật mã hóa với "Khóa phiên TGS/máy khách"
8 Khi nhận được 2 gói tin E và F, người sử dụng đã có đủ thông tin để nhận thực với máy chủ cung cấp dịch vụ SS Máy khách gửi tới SS 2 gói tin:
- Gói tin E thu được từ bước trước (trong đó có "Khóa phiên máy chủ/máy khách" mật mã hóa với khóa bí mật của SS)
- Gói tin G: phần nhận thực mới, bao gồm chỉ danh người sử dụng, thời điểm yêu cầu và được mật mã hóa với "Khóa phiên máy chủ/máy khách"
9 SS giải mã "Vé" bằng khóa bí mật của mình và gửi gói tin sau tới người sử dụng để xác nhận định danh của mình và khẳng định sự đồng ý cung cấp dịch vụ: Gói tin H: Thời điểm trong gói tin yêu cầu dịch vụ cộng thêm 1, mật mã hóa với
"Khóa phiên máy chủ/máy khách"
10 Máy khách giải mã gói tin xác nhận và kiểm tra thời gian có được cập nhật chính xác Nếu đúng thì người sử dụng có thể tin tưởng vào máy chủ SS và bắt đầu gửi yêu cầu sử dụng dịch vụ
11 Máy chủ cung cấp dịch vụ cho người sử dụng
5 RSA
- Chọn ngẫu nhiên 2 số nguyên tố lớn p và q Tính số làm modulo của hệ thống:
N = p.q
Trang 55
- Tính Ф(N)=(p-1)(q-1)
- Chọn ngẫu nhiên khoá mã e trong đó 1<e< Ф(N), e nguyên tố cùng nhau với Ф(N)
- Tìm khoá giải mã d sao cho e.d=1 mod Ф(N) với 0≤d≤ Ф(N)
- In khoá mã công khai KU = {e,N}
Giữ khoá riêng bí mật KR = {d,N}
- Mã hoá mẩu tin: C = E(M,KU) = Me mod N, trong đó 0≤M<N
Giải mã: M = D(C,KR) = Cd mod N
6 Mã hoá khối
- Mã hóa khối là kiểu mã hoá dữ liệu được chia ra thành từng khối có kích thước
cố định để mã hoá
- Các yêu cầu khi thiết kế mã hoá khối:
Sự hỗn loa ̣n (confusion): sự phu ̣ thuô ̣c giữa bản rõ và bản mã phải thực
sự phức ta ̣p để gây khó khăn đối với viê ̣c tìm quy luâ ̣t thám mã Mối quan hê ̣ này tốt nhất là phi tuyến
Sự khuếch tán (diffusion): Mỗi bit của bản rõ và khóa phải ảnh hưởng
lên càng nhiều bit của bản mã càng tốt
- DES thuộc loại mã hoá khối kiến trúc mô hình Feistel
AES thuộc loại mã hoá khối kiến trúc mạng thay thế - hoán vị
7 Tấn công RSA
1) Vét cạn khóa: cách tấn công này thử tất cả các khóa d có thể có để tìm ra bản giải mã có ý nghĩa, tương tự như cách thử khóa K của mã hóa đối xứng Với N lớn, việc tấn công là bất khả thi
2) Phân tích N thành thừa số nguyên tố N = pq: Hiện nay, nhiều thuật toán phân tích mới đã được đề xuất, cùng với tốc độ xử lý của máy tính ngày càng nhanh đã làm cho việc phân tích N không còn quá khó khăn như trước đây Năm 1977, các tác giả của RSA đã treo giải thưởng cho ai phá được RSA có kích thước của N vào khoảng 428 bít, tức 129 chữ số Các tác giả này ước đoán phải mất 40 nghìn triệu triệu năm mới có thể giải được Tuy nhiên vào năm 1994, câu đố này đã được giải chỉ trong vòng 8 tháng
3) Đo thời gian: Đây là một phương pháp phá mã không dựa vào mặt toán học của thuật toán RSA, mà dựa vào một “hiệu ứng lề” sinh ra bởi quá trình giải mã RSA Hiệu ứng lề đó là thời gian thực hiện giải mã Giả sử người phá mã có thể
đo được thời giải mã M = cd mod N dùng thuật toán bình phương liên tiếp Trong thuật toán bình phương liên tiếp, nếu một bít của d là 1 thì xảy ra hai phép modulo, nếu bít đó là 0 thì chỉ có một phép modulo, do đó thời gian thực hiện giải mã là khác nhau Bằng một số phép thử chosen-plaintext, người phá mã có thể biết được các bít của d là 0 hay 1 và từ đó biết được d
8 DES
Quy trình mã hoá
Trang 66
B1: Với bản rõ cho trước x, một xâu bit x0 sẽ được xây dựng bằng cách hoán vị các bit của x theo phép hoán vị cố định ban đầu IP Ta viết: x0 = IP(x) =
L0R0, trong đó L0 gồm 32 bit đầu và R0 là 32 bit cuối
B2: Sau đó tính toán 16 lần lặp theo một hàm xác định Ta sẽ tính LiRi, 1≤
i ≤16 theo quy tắc sau: Li = Ri-1; Ri = Li-1 f(Ri-1, ki)
Trong đó:
là phép loại trừ của hai xâu bit
f là một hàm sẽ được mô tả ở sau
k1, k2, …, k16 là các xâu bit có độ dài 48 được tính như 1 hàm của khóa k (ki chính là một phép chọn hoán vị bit trong k)
Một vòng của phép mã hóa được mô tả như sau:
B3: Áp dụng phép hoán vị ngược IP-1 cho xâu bit R16L16, ta thu được bản
mã y Tức là y = IP-1(R16L16) Hãy chú ý thứ tự đã đảo của L16 và R16
Sơ đồ mã hoá DES
Trang 77
9
- Tính chất của hàm băm không có khoá:
Tính chất nén
Tính dễ dàng tính toán
Tính khó tính toán nghịch ảnh
Khó tìm nghịch ảnh thứ hai: với x cho trước thì không có khả năng tìm x’
x sao cho: h(x) = h(x’)
Tính kháng va chạm: không có khả năng về tính toán để tìm hai đầu vào khác nhau bất kì x’ và x để h(x) = h(x’)
- Nguyên tắc làm việc của hàm băm có khoá:
Input: Dữ liệu x, mật mã khối E, khoá MAC bí mật k của E
Output: n bit MAC trên x (n là độ dài khối của E)
(1) Độn và chia khối: Độn thêm các bit vào x nếu cần Chia dữ liệu đã độn thành từng khối n bit : x1, …, xt
(2) Xử lý theo chế độ CBC Ký hiệu Ek là phép mã hoá E với khoá k.Tính khối
Ht như sau:
H1 Ek(x1)
Hi Ek(Hi-1 xi) 2 i t
(3) Xử lý thêm để tăng sức mạnh của MAC Dùng một khoá bí mật thứ hai k
k’ Tính:
Ht’ Ek-1(Ht)
Ht Ek(Ht’) (4) Xử lý thêm để tăng sức mạnh của MAC
(5) Kết thúc: MAC là khối n bit Ht
10 Kryptoknight
Single Sign-On
- Thực hiện đăng nhập mạng và thống nhất toàn bộ cho người sử dụng bằng cách
thực hiện các lệnh kklogin trên một máy trạm công khai
- kklogin kích hoạt một tin nhắn trao đổi giữa các địa phương (stub) chương trình
KrytoKinght thực hiện lệnh và đưa đến AS Trong thông điệp đầu tiên, người sử dụng nói với AS rằng người đó muốn đăng nhập, xác định tên của mình Thông báo này cho phép các AS xác thực người sử dụng vì nó có chứa một giá trị là một chức năng của cả
thời gian hiện tại và mật khẩu của người dùng
- Thông điệp thứ hai chứa các trả lời từ AS, được niêm phong với khóa dựa vào
mật khẩu của người dùng Tại thời điểm này, kklogin nhắc người dùng nhập mật khẩu
của mình và sử dụng mật khẩu này để mở niêm phong trả lời của AS, lấy các chứng chỉ
chứa trong nó
- Một kết quả thành công có nghĩa là người sử dụng đã cung cấp một mật khẩu
chính xác và đã được chứng minh danh tính của mình
Trang 88
Two-Party Authentication (Xác thực 2 bên)
Một thực thể, được gọi là người khởi xướng, bắt đầu quá trình xác thực bằng cách phát hành một cuộc gọi API trả về một thông báo xác thực
Tin xác thực này được gửi đến thực thể ngang hàng từ xa, được gọi là người trả lời Khi người trả lời nhận được tin nhắn, nó tạo ra một cuộc gọi API tương ứng mà xác
minh tính hợp lệ của các thông báo xác thực đến
Tùy thuộc vào các thông số xác thực, hoặc là một cách xác thực có thể được thực hiện
Key Distribution(Phân phối khóa)
- Để có được một khóa bí mật được chia sẻ, hai bên đầu tiên phải tham gia vào
một cuộc đối thoại với một kryptokinght AS
- Toàn bộ quá trình liên hệ với AS, chứng minh danh tính của một người, và nhận được chìa khóa, được ẩn từ các đơn vị sử dụng kryptoknight nói cách khác, đã hoặc không phải là hai bên Share một khóa, họ thực hiện cuộc gọi API cùng với chính xác các thông số tương tự một khi một phím được ban hành và recevied, nó được lưu trữ
để sử dụng sau
Authentication of origin and contents of data (Xác thực nguồn gốc và nội dung của
dữ liệu)
- Xác thực thành công
- Một phiên kryptoknight được đặc trưng bởi khóa bí mật chung của họ phiên này các máy chủ như là một bối cảnh giao tiếp an toàn hơn nữa giữa hai bên nó sẽ bị chấm dứt hoặc rõ ràng, bởi một trong các bên giao tiếp gửi cho bên kia một yêu cầu kết thúc phiên, hoặc ngầm khi hết thời hạn của khóa chia sẻ
11 RC4
RC4 : Đơn vị mã hóa của RC4 là một byte 8 bít RC4 dùng 2 mảng S và T gồm
256 số nguyên 8 bít Khóa K là một dãy gồm N số nguyên 8 bít với N có thể lấy giá trị từ 1 đến 256 Bộ sinh số mỗi lần sinh ra một byte để sử dụng trong phép XOR Hai giai đoạn của RC4 là
• Giai đoạn khởi tạo:
/* Khoi tao day S va T*/
for i = 0 to 255 do
S[i] = i;
T[i] = K[i mod N];
next i
/* Hoan vi day S */
j = 0;
for i = 0 to 255 do
j = (j + S[i] + T[i]) mod 256;
Swap(S[i], S[j]);
Trang 99
next i
• Giai đoạn sinh số:
i, j = 0;
while (true)
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
Swap (S[i], S[j]);
t = (S[i] + S[j]) mod 256;
k = S[t];
end while;
12 Mô hình mã Feistel
Mô hình mã Feistel là một dạng tiếp cận khác so với mạng SP Mô hình do Horst Feistel đề xuất, cũng là sự kết hợp các phép thay thế và hoán vị Trong hệ
mã Feistel, bản rõ sẽ được biến đổi qua một số vòng để cho ra bản mã cuối cùng:
P 𝐾→ C1 1
𝐾2
→ C2
𝐾3
→ … 𝐾→ C𝑛−1 n Trong đó bản rõ P và các bản mã Ci được chia thành nửa trái và nửa phải:
P = (L0, R0)
Ci = (Li, Ri) i = 1, 2, …n
Quy tắc biến đổi các nửa trái phải này qua các vòng được thực hiện như sau:
Li = Ri-1
Ri = Li-1 F(Ri-1, Ki)
Ki là một khóa con cho vòng thứ i Khóa con này được sinh ra từ khóa K
ban đầu theo một thuật toán sinh khóa con (key schedule):
K → K1 → K2 → … → Kn
F là một hàm mã hóa dùng chung cho tất cả các vòng Hàm F đóng vai trò
như là phép thay thế còn việc hoán đổi các nửa trái phải có vai trò hoán vị Bản
mã C được tính từ kết xuất của vòng cuối cùng:
C = Cn = (Ln, Rn)
Trang 1010
13 Thuật toán MD5
Mô tả thuật toán
- Đầu vào: là một thông điệp có độ dài tuỳ ý
- Đầu ra là một chuỗi có độ dài cố định là 128 bit
- Thuật toán được thiết kế để chạy trên các máy tính 32 bit
Thuật toán:
- Thông điệp đầu vào có độ dài b bit bất kỳ Biểu diễn các bit dưới dạng như sau: m[0] m[1] m[2] m[b-1]
- Bước1: Các bit gắn thêm : Thông điệp được mở rộng, thêm bit vào phía sau sao cho độ dài của nó (bit) đồng dư với 448 theo môđun 512 Nghĩa là thông điệp được mở rộng sao cho nó còn thiếu 64 bit nữa thì sẽ có một độ dài chia hết cho
512 Việc thêm bit này được thực hiện như sau:
Một bit ‘1’ được thêm vào sau thông điệp
Sau đó các bit ‘0’ được thêm vào để có một độ dài đồng dư với 448 môđun
512
- Bước 2: Gắn thêm độ dài: Dạng biểu diễn 64 bit độ dài b của chuỗi ban đầu được thêm vào phía sau kết quả của bước 1
- Bước 3: Khởi tạo bộ đệm MD: Một bộ đệm 4 từ (A,B,C,D) được dùng để tính
mã số thông điệp Ở đây mỗi A,B,C,D là một thanh ghi 32 bit Những thanh ghi này được khởi tạo theo những giá trị hex sau :
A=0x01234567
- Bước 4 : Xử lý thông điệp theo từng khối 16 từ Định nghĩa các hàm phụ, các hàm này nhận giá trị đầu vào là 3 từ 32 bit và tạo tạo ra một word 32 bit
F(X,Y,Z) = (XY) (XZ)