người gửi và người nhận. Bên cạnh đó, cả hai bên trong giao dịch đều dùng một khóa để mã hóa và giải mã, vì thế chúng ta khơng thể xác minh được ai là người đã
tạo ra thông điệp. Để mỗi thông điệp gửi cho một người được an toàn, chúng ta phải tạo ra các mật mã riêng cho từng người nhận. Giả sử có n người tham gia giao dịch
thì chúng ta phải tạo ra nn-12 khóa. Như vậy số lượng khóa sẽ rất nhiều, gây khó khăn cho nhà quản lý.
Có thể tóm tắt những ưu và nhược điểm của việc sử dụng mã hóa khóa bí mật.
– Ưu điểm
• Là một phương pháp mã hóa đơn giản và hữu dụng trong một số trường hợp
– Khuyết điểm
• Các bên tham gia trong quá trình mã hóa cần tin tưởng nhau trong việc trao mã khóa
• Rất khó để thực hiện việc phân phối an tồn các mã khóa bí mật với hàng ngàn khách hàng trực tuyến
• Tốn một khoảng chi phí khơng nhỏ cho việc tạo một mã khóa riêng và chuyển nó tới khách hàng muốn giao dịch
2.2.3 Mã hóa khóa cơng cộng
Mã hóa khóa cơng cộng hay còn gọi lã mã hóa khóa cơng khai hoặc mã hóa khóa bất đối xứng. Đây là phương pháp sử dụng hai mã khóa một mã khóa sử dụng trong q
trình mã hóa và một mã khóa sử dụng trong q trình giải mã. Hai khóa này có quan hệ với nhau về mặt thuật toán sao cho dữ liệu được mã hóa bằng khóa này sẽ được giải mã
bằng khóa kia. Mỗi người sử dụng có hai loại mã khóa: mã khóa bí mật chỉ riêng người gửi biết
còn mã khóa công cộng được thông báo rộng rãi cho những người sử dụng khác trong hệ thống. Để gửi một thông điệp an ninh, người gửi sử dụng mã khóa cơng cộng của người
nhận để mã hóa thơng điệp. Người nhận khi nhận được thơng điệp đã được mã hóa sẽ sử dụng mã khóa cá nhân của mình để giải mã thơng điệp. Vì khơng ai có thể biết được
mã khóa bí mật của người nhận nên khơng ai có thể đọc được thơng điệp đó, thơng điệp được đảm bảo.
KHĨA I Trang 9
Hình 2.3: Q trình truyền tin sử dụng mã hóa cơng cộng
Người ta có thể sử dụng cả mã hóa bí mật và mã hóa cơng cộng để mã hóa thơng điệp. Giả sử rằng khách hàng sử dụng mã khóa cơng cộng của người bán để mã khóa
thơng điệp, lúc này có thể xác minh được người nhận là người bán. Tuy nhiên người bán lại không thể xác minh được người gửi là ai. Nếu sử dụng mã khóa bí mật của người gửi
để mã hóa thơng điệp, khi đó thơng điệp chỉ có thể được giải mã bằng mã hóa cơng cộng của người gửi. Như vậy có thể xác minh được người gửi là ai. Hai phương pháp có thể
kết hợp để xác minh cả hai bên tham gia giao dịch, theo đó cả hai loại mã khóa cơng cộng và mã khóa bí mật đều sử dụng để mã hóa và sau đó người nhận cũng sử dụng cả
hai khóa này để giải mã. Bởi mỗi người đều có một cặp khóa, khóa bí mật và khóa cơng cộng cho mình nên giả sử khi có n người tham gia giao dịch thì sẽ tạo ra 2n khóa. Dựa
trên giả thuyết này chúng ta có thể đi đến một kết luận để đảm bảo sử dụng phương pháp mã hóa tốt nhất, giả sử n là số người tham gia giao dịch, ta có phương trình tốn
học như sau: [nn-12] - 2n=0 Giải phương trình ta có: nếu n5 ta nên sử dụng phương pháp mã hóa khóa cơng
cộng, nếu n=5 ta nên sử dụng phương pháp mã hóa khóa bí mật. Có thể tóm tắt những ưu và nhược điểm của việc sử dụng mã hóa khóa cơng cộng:
- Ưu điểm
• Phù hợp khi có nhiều bên tham gia truyền thơng trên mạng → việc cung cấp khóa cơng khai an tồn hơn
• Dùng 2 khóa đảm bảo an tồn thơng tin
– Khuyết điểm
• Phải dùng 2 khóa cho một q trình truyền
KHĨA I Trang 10
Thuật tốn phổ biến nhất trong mã hóa khóa cơng cộng là kỹ thuật mã hóa RSA, được xuất hiện từ năm 1977. Ngày nay, RSA được sử dụng ở hầu hết ở các công ty lớn
trên thế giới và đặc biệt là ứng dụng của kỹ thuật này với chữ ký điện tử trong hệ thống thương mại điện tử.
2.3 Một số thuật tốn trong chương trình ứng dụng 2.3.1 Thuật tốn mã hóa RSA
RSA là một thuật tốn mật mã hóa khóa cơng khai. Đây là thuật tốn đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến
bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa cơng cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với
điều kiện độ dài khóa đủ lớn. Thuật tốn được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào
năm 1977 tại Học viện Công nghệ Massachusetts MIT. Tên của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả.
Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983, số đăng ký 4,405,829. Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy
nhiên, do thuật toán đã được cơng bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như khơng có giá trị bên ngoài Hoa Kỳ.
Sự khác biệt giữa một hệ thống mã bí mật với một hệ thống mã cơng khai là hệ thống mã cơng khai dùng hai khóa khác nhau để mã hóa và giải mã. Do đó, một bộ mã
cơng khai sẽ bao gồm hai khóa: một khóa dành cho người mã hóa, thường được cơng khai và khóa còn lại dùng cho người giải mã, thường được giữ bí mật. Mặc dù, hai khóa
đó thực hiện các thao tác ngược nhau và có liên quan với nhau, nhưng phải làm sao để khơng thể suy ra khóa bí mật từ khóa cơng khai.
Thuật tốn
Thuật tốn RSA chủ yếu dựa trên 3 số nguyên dương d, e, n với: d: số mũ bí mật
e: số mũ cơng khai n: hằng số của phương pháp
Cặp e, n được gọi là khố cơng khai Public Key Cặp d, n được gọi là khố bí mật Private Key
KHĨA I Trang 11
Cơ sở toán học của hệ mã RSA là định lý Euler: “Nếu n và a là 2 số nguyên tố cùng nhau, ta có a
Фn
= 1mod n, trong đó Фn là số nguyên trong đoạn [1, n], và nguyên tố cùng nhau với n”.
Ta có: Nếu n là số nguyên tố thì Фn = n -1
Nếu n là tích của 2 số nguyên tố p và q n = p q thì Фn = p – 1 q – 1. Giả sử thông điệp số m là một số nguyên trong đoạn [2, n -1], sau đó, m sẽ
được mã hố bằng khố cơng khai e, n thành số nguyên c. c = m
e
mod n. Nếu số ngun d trong khố bí mật d, n thoả điều kiện:
e d = 1mod Фn thì tồn tại một số nguyên k sao cho e k = k Фn +1.
Và c
d
mod n = me mod n d mod n = med mod n
= [mk. ϕ
n mod n] [m mod n] = [k mod n] [m mod n]
= m. Có thể tìm lại thơng điệp m từ khố bí mật d, n và bản mã c theo công thức: m
= c
d
mod n.
Các bước thực hiện
1.
Tạo ngẫu nhiên 2 số nguyên tố p, q phân biệt, gần nhau và rất lớn có số ký tự ít nhất là 100 và sau đó tính:
n = p q Фn = p -1 q -1
2.
Chọn ngẫu nhiên 1 số e sao cho 1 e Фn, với e là số nguyên tố cùng nhau với Фn.
3.
Tính số nghịch đảo d của e đối với Фn: 1 d Фn, ed = 1mod Фn dùng thuật toán Eulid mở rộng.
- Mã hoá: B muốn gởi thông điệp m cho A với yêu cầu cần bảo mật thơng tin. B u cầu A gởi khố cơng khai e, n
B dùng khố cơng khai e, n này, mã hố thơng điệp m thành c theo cơng thức c = m
e
mod n.
KHĨA I Trang 12
B sẽ gởi c cho A. - Giải mã: dùng khoá bí mật d, n, A sẽ tính m = c
d
mod n, để có thể khơi phục lại dữ liệu gốc ban đầu do B gởi đến.
Chú ý:
Với dữ liệu có kích thước lớn, khi mã hố, dữ liệu sẽ được phân chia thành nhiều block nhỏ để dể dàng hơn.
Dữ liệu khi được mã hoá sẽ biến thành những con số, có kích thước phụ thuộc vào số n thường là nhỏ hơn n. Khi người nhận nhận được dữ liệu bị mã hoá, trước khi giải
mã, nếu người nhận muốn đọc thì đó chỉ là những con số vơ nghĩa, khơng thể đốn được nội dung. Để đọc được nội dung thì người nhận phải giải mã lại dữ liệu bị mã hố trên,
dùng Private Key của mình phù hợp với Public Key đã gởi cho người gởi. Khi giải mã, dựa vào những số được mã hoá bằng Public Key, người dùng sẽ giải
mã dữ liệu bằng Private Key của mình. Thật sự, đây cũng là những con số, dựa vào số d. Public Key là chung người nào cũng có thể biết nhưng để giải mã được văn bản bị
mã hố thì phải dùng Private key phù hợp với Public key trên, và Private key này là bí mật, chỉ người cần giải mã mới biết đến.
Ví dụ 2:
Trước hết, Ta chọn hai số nguyên tố p và q, với p = 5, q = 7 Tính n = pq = 5 7 = 35
Z = p-1 q – 1 = 5 -17-1 = 24 Tiếp đến, chọn e thoả điều kiện 1 e n
chọn e = 5 Tìm d, sao cho e d -1 chia hết cho z
Ta có: 5 29- 1 thì thoả chia hết cho 24 chọn d = 29
Do đó, ta có cặp key Key Pair như sau: Public Key = n,e = 35, 5
Private Key = n,d = 35,29 Áp dụng để mã hoá chuỗi :
SECURE Trong bảng chữ cái, có tất cả 26 ký tự, các ký tự ứng với một con số. Do đó, ta có
bảng sau: Nội dung
Vị trí M
e
Nội dung bị mã
KHĨA I Trang 13
hố S
19 2476099
24 E
5 3125
10 C
3 243
33 U
21 4084101
21 R
18 1889568
23 E
5 3125
10
Bảng 1: Mã hóa chuỗi SECURE
Nếu tại đây, dữ liệu trên đường chuyển đến người nhận bị một người khác bắt được, anh ta sẽ khơng biết được nội dung muốn nói điều gì, mà chỉ nhận được đó chỉ là những
con số, khơng nói lên được điều gì. Nếu muốn đọc được nội dung, anh ta phải có Private Key, mà ứng với Public Key dùng để mã hoá dữ liệu trên thì phải có private Key thích
hợp. Do đó, dữ liệu sẽ an toàn. Khi dữ liệu đến tay người nhận, muốn khôi phục lại dữ liệu gốc ban đầu, ta sẽ
decrypt lại với n = 35, d = 29 Nội dung bị mã hoá
M = c
d
mod n Dữ liệu gốc
24 19
S 10
5 E
33 3
C 21
21 U
23 18
R 10
5 E
Bảng 2: Giải mã chuỗi SECURE
Public Key = n,e = 35, 5. Private Key = n,d = 35,29.
Khi mã hoá dữ liệu dùng thuật toán RSA, dữ liệu sẽ được gởi đi dưới dạng những con số, bằng cách dùng Public Key để mã hố. Trên đường truyền, nếu Hacker bắt được
thì đó cũng chỉ là những con số, khơng thể đốn được gì. Khi nhận được dữ liệu bị mã hố, người nhận sẽ dùng Private Key phù hợp để giải mã ngược trở lại.
Tốc độ mã hoá và giải mã dữ liệu của RSA khơng phụ thuộc vào kích thước của Key n
Length of ‘n’ 512 bit
768 bits 1,024 bits
Encryption 0.03 sec
0.05 sec 0.08 sec
Decryption 0.16 sec
0.48 sec 0.93 sec
Bảng 3: Tốc độ mã hóa, giải mã của RSA
KHĨA I Trang 14
2.3.2 Thuật tốn mã hóa El Gamal