Trang 7 DES 3DES, RC4, AES, RSA, Rabin, Di昀툀e-Hellman,Elgamal,...Qua dự án lần này nhóm sinh viên chúng em đã đi sâu tìmhiểu về xây dựng và phát triển mã hóa giải mã Elgammal ,nắm được n
Tổng quan
Giới thiệu về an toàn thông tin
An toàn thông tin là bảo vệ các đặc tính riêng tư (con昀椀dentialy), toàn vẹn (intergrity) và khả dụng (availabity) của thông tin.
- C: (Con昀椀dentialy) bảo vệ tính riêng tư của dữ liệu thông qua các cơ chế chứng thực và mã hóa, ngăn ngừa những người không hợp lệ sẽ không được đọc những thông tin Giống như các bì thư khi phát lương thưởng được dán chữ Con昀椀dentialy, chúng ta có thể hình dung trong môi trường công nghệ thông tin là một người chưa đăng nhập vào Domain sẽ không được truy cập những dữ liệu chỉ chia sẻ cho các Domain User.
- I: (Intergrity) bảo vệ tính toàn vẹn của dữ liệu thông qua các thuật toán RSA, SHA, MD5 ngăn ngừa attacker thay đổi các thông tin nhạy cảm trong quá trình truyền.
- A: (Available) bảo đảm dữ liệu luôn ở trong trạng thái sẵn sằng đáp ứng nhu cầu của người dùng.
- Non-Repudiation: Tính không thể chối bỏ, nghĩa là dữ liệu người nào gửi đi thì họ phải có trách nhiệm với các thông tin của mình thông qua các xác nhận nguồn gốc như chữ kí điện tử. Để đảm bảo việc truyền tin an toàn và kiểm tra tính toàn vẹn của thông tin, người ta thường mã hóa thông tin trước khi truyền đi bằng các một sổ các hệ mật như DES, Triple
DES (3DES), RC4, AES, RSA, Rabin, Di昀툀e-Hellman, Elgamal,
Qua dự án lần này nhóm sinh viên chúng em đã đi sâu tìm hiểu về xây dựng và phát triển mã hóa giải mã Elgammal , nắm được những kiến thức cơ bản
Trong phương pháp mã hóa và giải mã cũng như là các thuật toán cần thiết bằng các ngôn ngữ như: C#, Java,Python, C++
Lý do chọn đề tài
1.2.1 Vai trò của hệ mật mã
- Phải che giấu được nội dung của văn bản rõ (plaintext)
- Tạo các yếu tố xác thực thông tin, đảm bảo thông tin lưu hành trong hệ thống đến người nhận hợp pháp là xác thực
- Tổ chức các sơ đồ chữ ký điện tử, đảm bảo k có hiện tượng giả mạo, mạo danh để gửi thông tin lên mạng.
- Bản rõ X: được gọi là bản tin gốc, bản rõ có thể được chia nhỏ có kích thước phù hợp.
- Bản mã Y: là bản tin gốc đã được mã hoá
- Mã: là thuật toán mã hoá chuyển bản rõ thành bản mã,thông thường chúng ta cần thuật toán mã hoá mạnh,cho dù kẻ thù biết được thuật toán, nhưng không biết thông tin về khoá thì cũng không tìm được bản rỏ.
- Khoá K: là thông tin tham số dùng để mã hoá, chỉ có người gửi và người nhận biết Khoá là độc lập với bản rõ và có độ dài phù hợp với yêu cầu bảo mật.
- Mã hoá: là quá trình chuyển bản rõ thành bản mã.
- Giải mã: là quá trình chuyển bản mã thành bản rõ, đây là quá trình ngược lại của mã hoá.
1.2.3 Các thành phần của hệ mật mã
Một hệ mật mã là một hệ bao gồm 5 thành phần (P, C, K,
● P (Plaintext): không gian bản rõ, là tập hợp hữu hạn các bản rõ có thể.
● C (Ciphertext): không gian bản mã, là tập hợp những bản mã có thể.
● K (Key): không gian khoá, là tập hợp các khoá có thể.
● E (Encryption): không gian hàm mã hoá, là tập hợp các quy tắc mã hoá có thể.
● D (Decryption): không gian hàm giải mã, là tập hợp các quy tắc giải mã có thể. Đối với mỗi k thuộc K có một quy tắc mã hoá ek: P -> C thuộc E và một quy tắc giải mã tương ứng dk: C -> P thuộcD
Hình 1.1: Quá trình mã hoá và giải mã thông tin
1.2.4 Phân loại hệ mật mã
- Hệ mật mã đối xứng: hay còn gọi là mật mã khoá bí mật, là những hệ mật dùng chung một khó cả trong quá trình mã hoá và giải mã dữ liệu Do đó khoá phải giữ bí mật tuyệt đối Một số thuật toán nổi tiếng như: DES, Triple DES, RC4, …
- Hệ mật mã bất đối xứng (mật mã khoá công khai): dùng một khoá để mã hoá sau đó dùng một khoá khác để giải mã (2 khoá khác nhau) Các khoá này tạo nên từng cặp chuyển đổi ngược nhau và không có khó nào có thể suy được từ khoá nào Kháo đung để mã hoá có thể công khai, nhưng khoá dùng để giải mã phải giữ bí mật Một số thuật toán nổi tiếng như: RSA, Elgamal, …
Giới thiệu về hệ mã Elgamal
1.3.1 Giới thiệu chung về hệ mã Elgamal
- Là một hệ mật mã công khai
- Dựa trên bài toán logarithm rời rạc Tính an toàn của nó phụ thuộc vào độ phức tạp của bài toán logarithm.
- Là một biến thể của sơ đồ phân khối khoá Di昀케e-
Hellman, được đưa ra năm 1984.
- So với hệ mã RSA, hệ mã Elgamal không có nhiều rắc rối về vấn đề quyển sử dụng.
1.3.2 Mã hoá và giải mã hệ mã Elgamal
* Quá trình mã hoá và giải mã
Hình 1.2: Sơ đồ quá trình mã hoá và giải mã hệ mã Elgamal
- Ban đầu người ta sẽ lựa chọn một số nguyên tố lớn p và
2 số nguyên tố nhỏ hơn p là alpha (phần tử nguyên thuỷ của Z*p) và a (khoá bí mật của người nhận) sau đó tính: beta = alpha a mod p
- Để mã hoá một thông điệp M thành bản mã C, người gửi chọn số ngẫu nhiên k (1 < k < p – 1) và tính cặp bản mã: o C1 = alpha k mod p o C2 = (M * beta k ) mod p
Và gửi bản mã: C = (C1, C2) đi (sau đó k sẽ bị huỷ đi).
- Để giải mã thông điệp M đầu tiên ta dùng khoá bí mật a và tính theo công thức: o M = (C2 * (C1 a ) -1 ) mod p với (C1 a ) -1 mod p = (C1(p-1- a)) mod p
* Bài toán logarithm rời rạc:
- Logarithm rời rạc là sự kết nối của phép tính logarithm trên trường số thực vào các nhóm hữu hạn Ta nhắc lại rằng với hai số thực x, y và cơ số a > 0, a # 0, nếu a x – y
= 0 được gọi là logarithm cơ số a của y ký kiệu: x = logay
- Logarithm rời rạc là bài toán khó (chưa biết thuật toán hiệu quả nào) Trong khi bài toán ngược luỹ thừa rời rạc lại không khó (có thể sử dụng thuật toán bình phương và nhân)
- Hệ mã Elgamal dựa trên bài toán logarithm rời rạc Tính an toàn của nó tuỳ thuộc vào độ phức tạp của bài toán logarithm.
- Trong bài toán về hệ mã Elgamal: o p là số nguyên tố, alpha là phần tử nguyên thuỷ củaZ*p o Bài toán logarithm rời rạc có thể được phát biểu như sau: Tìm một số mũ a duy nhất (1 < x < p – 1) sao cho beta = alpha a mod p, với y thuộc Z*p cho trước. o Bài toán có thể giải được bởi phương pháp vét cạn (tức là duyệt tất cả phần tử a) để tìm a thoả mãn. Khi đó độ phức tạp là sẽ là O(p) Vấn đề đặt ra là nêu p lớn, rất lớn thì để thực hiện phương pháp này cần thời gian rất lớn -> không khả thi.
- Đánh giá độ an toàn của hệ mã Elgamal : o Hệ mã Egamal áp dụng bài toán logarithm rời rạc, chính vì vậy độ an toàn của hệ mã Elgamal là rất lớn vì bài toán logarith rời rạc chưa có phương pháp hiệu quả để giải. o Với một số nguyên tố p đủ lớn thì thuật toán Elgamal không có phương pháp thám mã hiệu quả.
1.3.4 Ưu và nhược điểm của hệ mã Elgamal
- Ưu điểm: o Độ phức tạp của bài toán logarithm rời rạc lớn nên độ an toàn cao. o Bản mã phụ thuộc vào bản rõ X và giá trị ngẫu nhiên nên từ một bản rõ có thể có nhiều bản mã khác nhau.
- Nhược điểm: o Tốc độ chậm (do phải xử lý số nguyên lớn) o Dung lượng bộ nhớ dành cho việc lưu trữ khoá yêu cầu phải lớn. o Việc sinh khoá và quản lý khoá cũng khó khăn hơn các hệ mã khác (do sử dụng các số nguyên tố)
1.3.5 Tính an toàn của hệ mã Elgamal
Giả sử C có được bản mã, để giải mã được thì C phải đối mặt với bài toán sau:
C phải tìm số a sao cho h ≡ g a (mod p) để có thể dùng phương pháp giải mã như B đã làm; Hoặc C phải tìm số b sao cho y1 ≡ g b (mod p) để có thể tính trực tiếp hb và từ đó tìm được r.
Cả hai cách tiếp cận nói trên đều đòi hỏi C phải giải bài toán logarithm rời rạc, là một bài toán khó, do đó ElGamal là hệ mã khóa tương đối an toàn.
Kết quả nghiên cứu
Giới thiệu
- Tên đề tài: “Xây dựng chương trình mã hoá và giải mã Elgamal.”
- Các bước thực hiện triển khai đề tài bao gồm: o Nghiên cứu nội dung các thuật toán (Kiểm tra số nguyên tố, Euclid tìm ước chung lớn nhất, Bình phương và nhân tính x^n mod m, …) o Thiết kế và cài đặt chương trình demo thuật toán
- Hình thức sản phẩm: sản phẩm ứng dụng
- Kết quả đạt được: nghiên cứu, cài đặt đề mô thuật toán.
- Thành viên xây dựng các chương trình ứng dụng web và ứng dụng desktop trên nền các ngôn ngữ lập trình riêng biệt:
Trần Xuân Vũ Ngôn ngữ lập trình
Nội dung thuật toán
2.2.1 Kiểm tra số nguyên tố
- Bước 1: Kiểm tra xem số đó có nhỏ hơn 2 hay không, nếu phải thì nó không phải là số nguyên tố.
- Bước 2: Tìm căn bậc hai của số đó và làm tròn lên đến số nguyên gần nhất Chẳng hạn nếu số đó là 17 thì căn bậc hai của nó là 4.12, lấy số nguyên là 5.
- Bước 3: Kiểm tra xem số đó có chia hết cho các số từ 2 đến căn bậc hai của số đó không Nếu có, thì nó không phải là số nguyên tố.
- Bước 4: Nếu không có số nào từ 2 đến căn bậc hai của số đó chia hết cho nó, thì nó là số nguyên tố.
Ví dụ: Để kiểm tra số 17 có phải là số nguyên tố không?
● Căn bậc hai của 17 là 4.12, lấy số nguyên là 4, qua bước 2.
● Kiểm tra xem 17 có chia hết cho các số từ 2 đến 5 không Nếu 17 không chia hết cho số nào, qua bước 3, ngược lại thì 17 không phải là số nguyên tố.
● Vậy 17 là số nguyên tố, qua bước 4.
2.2.2 Thuật toán euclid tìm ước chung lớn nhất
- Thuật toán Euclid tìm ước chung lớn nhất của hai số nguyên không âm GCD(a, b) o Nếu a = 0 thì GCD(a, b) = b return b o Nếu b = 0 thì GCD(a, b) = a return a o Nếu a # 0, b # 0 Giả sử A > B:
▪Theo thuật toán Euclid ta có:
Hình 2.2.2: demo thuật toán Euclid tìm ước chung lớn nhất của hai số
2.2.3 Thuật toán bình phương và nhân tính x^n mod m
- Giải thuật đệ quy: để tính luỹ thừa tự nhiên bậc n của x như sau: o Với n = 0 thì x^n = 1 Với n > 0 ta có công thức bình phương và nhân f ( n ) ={( x k ) 2 khi n chẵn ( x k )∗x khi n lẻ
Như vậy phép tính x^n được quy về một số phép tính bình phương và nhân.
- Giải thuật không đệ quy: o Nhận xét: trong giải thuật đệ quy, có xét tính chẵn lẻ của n và liên tục chia n cho 2, lấy phần nguyên đến khi n = 0 Thực chất quá trình này chính là tìm các bit của n hay chính là thực hiện chuyển đổi n sang số nhị phân sau đó tính luỹ thừa theo quy tắc bình phương và nhân.
Hình 2.2.3: demo thuật toán bình phương và nhân tính x^n mod m
- Định lý Fermat được phát biểu như sau: Nếu p là số nguyên tố và a là số nguyên bất kì khác bội của p (hay GCD (a, p) = 1), ta có: a p-1 ≡ 1(mod p)
Ta có: a p-1 mod p = 5 3-1 mod 3 = 5 2 mod 3= 25 mod 3 1 mod 3=1 (đpcm)
- Một dạng thay thế của định lý Fermat: Nếu p là số nguyên tố, a là một số nguyên không là bội của p, ta luôn có: a p ≡ a mod p
Ta có: a p mod p = 3 5 mod 5 = 243 mod 5 = 3 mod 5 = 3 (đpcm)
Lưu ý: Công thức trên luôn đúng nếu p là số nguyên tố, còn a là số nguyên dương bé hơn p.
- Định nghĩa : Hàm phi Euler của của số nguyên dương n là số các số nguyên tố cùng nhau với n và nhỏ hơn n Kí hiệu là Φ(n)
Tập đầy đủ các số nhỏ hơn n = 10 là {0,1,2,3,4,5,6,7,8,9} Tập các số nguyên tố cùng nhau với n = 10 là {1,3,7,9} có 4 số Vậy theo định nghĩa Φ10 = 4
● Tính chất 1 : Nếu n là số nguyên tố thì Φ(n) = n – 1
● Tính chất 2 : Nếu p, q là 2 số nguyên tố cùng nhau thì Φ(p*q) = Φp * Φq
● Tính chất 3 : Nếu p là số nguyên tố thì : Φ(p n) = p n - p n – 1
- Định lí Euler : Nếu a, m nguyên tố cùng nhau thì a Φ(m) đồng dư với 1 theo mod m: a Φ(m) = 1 mod m
2.2.6 Thuật toán Euclid mở rộng tìm nghịch đảo
- Bổ đề bezout: cho 2 số nguyên r0, r1, tồn tại 2 số nguyên khác s và t sao cho : s.r0+t.r1 = gcd(r0,r1) khi đó t = r1-1 theo mod r0.
- Thuật toán Euclid mở rộng tìm phần tử nghịch đảo cho 2 số nguyên r0 , r1 Tìm r-1 theo mod r0.
●Dùng thuật toán Euclid mở rộng để tim các số nguyên s và t sao cho s.r0+t.r1 = gcd(r0,r1) = d (nếu d > 1 thì r-1 mod r0 tồn tại ngược lại d = 1 tồn tại) Để tìm được s , t ta dùng công thức như sau: s0 = 1 t0 = 0 s1 = 0 t1 = 1 si = s(i – 2) – q(i-1)*s(i-1) ti = t(i-2) – q(i-1)*t(i-1)
Trong đó ta có : với i = 0,1,2,3… ri = qi+1 * ri+1+ri+2
Thuật toán dừng lại khi phần dư ri+2 = 0.
Hình 2.2.6: Thuật toán Euclid mở rộng tìm nghịch đảo
2.2.7 Thuật toán Baby-Step Giant-Step tìm phần tử sinh
- Bước 1: Tạo một số nguyên tố ngẫu nhiên p và một số nguyên g thuộc Z*p và g được chọn sao p-1 có nhiều thừa số nguyên tố khác nhau.
- Bước 2: Tìm kích thước của phần tử sinh bằng cách tính phi(p-1), trong đó phi là hàm số Euler.
- Bước 3: tạo một danh sách các giá trị Baby-Step bằng cách tính g^i mod p với i từ 0 đến (kích thước của phần tử sinh – 1).
- Bước 4: tạo một danh sách các giá trị Giant-Step bằng cách tính g^(k *j) mod p với j từ 0 đến (kích thước của phần tử sinh -1), trong đó k là một số nguyên được chọn sao cho k * k