1.4.2.1. Sơ đồ
Hệ mã hóa là bộ gồm 5 thành phần: {P, C, K, E, D}, trong đó: + P (Plaintext): là tập hữu hạn các bản rõ có thể;
+ C (CipherText): là tập hữu hạn các bản mã có thể; + K (Key): là tập hữu hạn các khóa có thể;
+ E (Encyption): là tập hợp các hàm mã hóa có thể; + D (Decyption): là tập các hàm giải mã có thể;
Với mỗi k K, ta có hàm mã hóa ek: P C và hàm giải mã dk: C P sao cho dk(ek(x)) = x, x P.
*Tạo cặp khóa (bí mật, công khai) (a, h) :
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Zp là “khó” giải. Chọn phần tử nguyên thuỷ gZp*. Đặt P = Z p*, C = Z p*Z p*.
Chọn khóa bí mật là a Zp*. Tính khóa công khai hg a mod p.
Định nghĩa tập khóa: = {(p, g, a, h): h g a mod p}. Các giá trị p, g, h được công khai, phải giữ bí mật a.
Với Bản rõ xP và Bản mã yC, với khóa k định nghĩa: * Lập mã:
Chọn ngẫu nhiên bí mật r Zp-1, bản mã là y = ek (x, r) = (y1, y2). Trong đó y1= gr mod p và y2 = x * h r mod p * Giải mã: dk (y1, y2) = y2*(y1 a) -1 mod p. 1.4.2.2 Ví dụ minh hoạ * Bản rõ x = 1299. Chọn p = 2579, g = 2, a = 765.
Tính khóa công khai h = 2765 mod 2579 = 949. * Lập mã: Chọn ngẫu nhiên r = 853. Bản mã là y = (435, 2369), trong đó y1 = 2853 mod 2579 = 435 và y2 = 1299 * 949 853 mod 2579 = 2396 * Giải mã: x = y2* (y1 a) -1 mod p = 2369 * (435 765) -1 mod 2579 = 1299.
1.4.3 Hệ mã hóa khoá công khai RSA
Hệ mã hóa khóa công khai được đề xuất bởi Ron Rivest, Adi Shamir và Len Adleman (MIT) vào năm 1978, .
Hệ mã hóa sử dụng phương pháp mã hóa khối với mỗi khối là một số nguyên < n: Thông thường kích cỡ n là 1024 bit ≈ 309 chữ số thập phân.
1.4.3.1 sơ đồ
Hệ mã hóa là bộ gồm 5 thành phần: {P, C, K, E, D}, trong đó: + P (Plaintext): là tập hữu hạn các bản rõ có thể;
+ C (CipherText): là tập hữu hạn các bản mã có thể; + K (Key): là tập hữu hạn các khóa có thể;
+ E (Encyption): là tập hợp các hàm mã hóa có thể; + D (Decyption): là tập các hàm giải mã có thể;
Với mỗi k K, ta có hàm mã hóa ek: P C và hàm giải mã dk: C P sao cho dk(ek(x)) = x, x P.
Giả sử khối bản gốc của người gửi là M và khối bản mã của người nhận là C, quá trình mã hóa và giải mã RSA là: C = Me mod n và M = Cd mod n
Cả người gửi và người nhận phải biết giá trị n. Người gửi biết giá trị b và chỉ người nhận biết giá trị a. Đây là một thuật toán mã hóa khóa công khai với khóa công khai KU = {b,n} và khóa riêng KR = {a,n}.
Tạo cặp khóa (bí mật, công khai) (a, b) :
- Chọn bí mật số nguyên tố lớn p, q, tính n = p * q, công khai n, đặt P = C = Zn - Tính bí mật (n) = (p-1)*(q-1). Chọn khóa công khai b < (n), nguyên tố với (n). - Khóa bí mật a là phần tử nghịch đảo của b theo mod (n): a*b 1 (mod (n)). - Tập cặp khóa (bí mật, công khai) K = (a, b)/ a, b Zn , a*b 1 (mod (n)). Với Bản rõ x P và Bản mã y C, định nghĩa:
* Hàm Mã hoá: y = ek (x) = x b mod n * Hàm Giải mã: x = dk (y) = y a mod n
1.4.3.2 Ví dụ minh hoạ
Bản rõ chữ: THPTTRUNGVUONG
Sinh khóa:
+ Chọn bí mật số nguyên tố p= 53, q= 61, tính n = p * q = 3233, công khai n. Đặt P = C = Zn , tính bí mật (n) = (p-1). (q-1) = 52 * 60 = 3120.
+ Chọn khóa công khai b là nguyên tố với (n), tức là ƯCLN(b,(n))=1, ví dụ chọn b = 71.
+ Khóa bí mật a là phần tử nghịch đảo của b theo mod (n):
a * b 1 (mod (n)). Từ a * b 1 (mod (n)), ta nhận được khóa bí mật a = 791.
Mã hoá
Bản rõ số:
T H P T T R U N G V U O N G
19 07 15 19 19 17 20 13 06 21 20 14 13 06 Chia thông điệp thành 7 khối, mỗi khối gồm 4 chữ số biểu diễn một số nguyên mi < n {1907, 1519, 1917, 2013, 0621, 2014, 1306}
Theo phép mã hoá: Mã hoá lần lượt từng số mi: ci = mi
b
mod n = mi
71
mod 3233. Mã hóa số đầu tiên m1= 1907 theo cách tính trên ta có:
c1 = m171 mod 3233 = 190771 mod 3233 = 635.
Tiếp tục tính các số c2, ..., c9 theo cách tính tương tự như trên ta có kết quả ở cột ci là bản mã để gửi đến người nhận: Khối 1 2 3 4 5 6 7 mi 1907 1519 1917 2013 0621 2014 1306 ci = e(mi) 635 2823 398 2013 356 2014 2334 Giải mã: mi = ci a mod n = ci 791 mod 3233
Giải mã số đầu tiên c1 = 635 theo cách tính trên ta có: m1 = c1791 mod 3233 = 635791 mod 3233 = 1907
Tiếp tục tính các số m1, ..., m7 từ các số c2, ..., c9 theo cách tính tương tự ta có bảng minh hoạ các số mi được giải mã từ các số ci như sau:
Khối 1 2 3 4 5 6 7
ci = e(mi) 635 2823 398 2013 356 2014 2334
mi 1907 1519 1917 2013 0621 2014 1306
Thực hiện phép biến đổi ngược từ các số mi thành các chuỗi kí tự tương ứng để khôi phục lại thông điệp gốc ban đầu m = „THPTTRUNGVUONG‟.
1.4.3.3 Độ an toàn
Độ bảo mật của RSA là cao nhờ ở mức độ khó của việc phân tích một số lớn ra các thừa số nguyên tố.
Để có thể giải mã cần phải có được các giá trị p, q tạo nên giá trị n.
Với các thuật toán hiện nay, thời gian cần thiết để phân tích một số lớn ra thừa số tăng theo hàm mũ với số đó.
Với n đủ lớn, việc này hoàn toàn không dễ gì ngay cả với các máy tính có tốc độ cực lớn.
Tại thời điểm năm 2005, số lớn nhất có thể được phân tích ra thừa số nguyên tố có độ dài 663 bit với phương pháp phân tán trong khi khoá của RSA có độ dài từ 1024 bit đến 2048 bit.
Như vậy, hệ mật mã RSA có thể coi như là an toàn.
1.5 Kết luận chương
Ngày nay vấn đề an toàn thông tin được xem là một trong những quan tâm hàng đầu của xã hội, có ảnh hưởng rất nhiều đến hầu hết các ngành, lĩnh vực, bao trùm toàn bộ các đối tượng tham gia giao dịch điện tử từ cá nhân, doanh nghiệp, tổ chức kinh tế, tổ chức chính trị - xã hội... An toàn thông tin có mục đích là phải tổ chức việc xử lý, ghi nhớ và trao đổi thông tin đảm bảo tính bí mật, toàn vẹn, sẵn sàng và đáng tin cậy.
Các giải pháp bảo mật an toàn thông tin phổ biến được biết đến hiện nay là che , giấu, bảo đảm toàn vẹn , xác thực thông tin ; kiểm soát lối vào ra của thông tin ; Phát hiện, xử lý các lỗ hổng và phối hợp các giải pháp . Một trong những kỹ thuật phổ biến trong các phương pháp bảo mật an toàn thông tin là “che” thông tin hay còn gọi là mã hoá thông tin. Mã hoá thông tin có mục đích ngoại trừ những người được phép thì không ai có thể đọc được dữ liệu. Các hệ mã hoá dữ liệu gồm: Hệ mã hóa khóa đối xứng và Hệ mã hóa
khóa phi đối xứng. Một số hệ mã hoá phi đối xứng (mã hoá khoá công khai) phổ biến đang áp dụng hiện nay là Hệ mã hoá khoá công khai RABIN, ELGAML, RSA,... Trong đó, thuật toán RSA có đặc tính hấp dẫn: một cặp khoá có thể cùng sử dụng cho cả hai mục đích đó là mã hoá (ví dụ sử dụng khi truyền một khoá đối xứng) và chữ ký số. Ví dụ nếu các thành viên A và B muốn truyền thông an toàn với nhau và B có một cặp khoá RSA. Bằng cách sử dụng một cặp khoá, B có thể ký một thông báo gửi cho A; B sinh ra một khoá riêng của B và A kiểm tra chữ ký bằng khoá công khai của B. Vấn đề này sẽ được đề cập kĩ hơn ở chương tiếp theo.
Chương 2. Chữ ký số
2.1 Giới thiệu
Một trong những ứng dụng của kỹ thuật mã hoá khóa công khai là chữ ký số. Chữ ký số được phát triển và ứng dụng rộng rãi hiện nay dựa trên một số thuật toán như RSA, DSA, ElGamal, SHA... là cơ sở quan trọng để hình thành hạ tầng khóa công khai cho phép người sử dụng của một mạng công cộng không bảo mật như Internet trao đổi dữ liệu và tiền một cách an toàn, thông qua việc sử dụng một cặp khóa công khai và bí mật được cấp phát. Các khái niệm, quá trình thực hiện chữ ký số và thuật toán sử dụng trong chữ ký số sẽ được giới thiệu chi tiết tại phần tiếp theo.
2.2 Khái niệm
2.2.1 Khái niệm
Chữ ký số là mô hình sử dụng các kỹ thuật mật mã để gắn với mỗi người sử dụng
một cặp khóa công khai - bí mật và qua đó có thể ký các văn bản điện tử cũng như trao đổi các thông tin mật. Khóa công khai thường được phân phối thông qua chứng thực khóa công khai. Quá trình sử dụng chữ ký số bao gồm 2 quá trình: tạo chữ ký và kiểm tra chữ ký.
2.2.2 Sơ đồ chữ ký số [2]
Sơ đồ chữ ký là bộ năm (P, A, K, S, V), trong đó:
P là tập hữu hạn các văn bản có thể.
A là tập hữu hạn các chữ ký có thể.
K là tập hữu hạn các khoá có thể.
S là tập các thuật toán ký.
V là tập các thuật toán kiểm thử.
Với mỗi khóa kK, có thuật toán ký Sig k S, Sigk: P A, có thuật toán kiểm tra chữ ký Ver k V, Ver k: PA đúng, sai, thoả mãn điều kiện sau: Với mọi x
P, yA:
Đúng, nếu y = Sig k(x)
Ver k (x, y) =
2.2.3 Các ưu điểm của chữ ký số
Việc sử dụng chữ ký số mang lại một số lợi điểm sau:
Khả năng xác định được nguồn gốc
Các hệ thống mật mã hóa khóa công khai cho phép mật mã hóa văn bản với khóa bí mật mà chỉ có người chủ của khóa biết. Để sử dụng chữ ký số thì văn bản cần phải được mã hóa bằng hàm băm. Sau đó dùng khóa bí mật của người chủ khóa để mã hóa, khi đó ta được chữ ký số. Khi cần kiểm tra, bên nhận giải mã để lấy lại chuỗi gốc (được sinh ra qua hàm băm ban đầu) và kiểm tra với hàm băm của văn bản nhận được. Nếu 2 giá trị này khớp nhau thì bên nhận có thể tin tưởng rằng văn bản xuất phát từ người sở hữu khóa bí mật. Tất nhiên là chúng ta không thể đảm bảo 100% là văn bản không bị giả mạo vì hệ thống vẫn có thể bị phá vỡ. Vấn đề xác thực đặc biệt quan trọng đối với các giao dịch tài chính.
Ví dụ: Một chi nhánh ngân hàng gửi một gói tin về trung tâm dưới dạng (a,b), trong đó a là số tài khoản và b là số tiền chuyển vào tài khoản đó. Một kẻ lừa đảo có thể gửi một số tiền nào đó để lấy nội dung gói tin và truyền lại gói tin thu được nhiều lần để thu lợi (tấn công truyền lại gói tin).
Tính toàn vẹn
Cả hai bên tham gia vào quá trình thông tin đều có thể tin tưởng là văn bản không bị sửa đổi trong khi truyền vì nếu văn bản bị thay đổi thì hàm băm cũng sẽ thay đổi và lập tức bị phát hiện. Quá trình mã hóa sẽ ẩn nội dung của gói tin đối với bên thứ 3 nhưng không ngăn cản được việc thay đổi nội dung của nó.
Ví dụ: tiếp tục ví dụ như ở trên, một kẻ lừa đảo gửi 1.000.000 đồng vào tài khoản của a, chặn gói tin (a,b) mà chi nhánh gửi về trung tâm rồi gửi gói tin (a,b3
) thay thế để lập
tức trở thành triệu phú.
Nhưng đó là vấn đề bảo mật của chi nhánh đối với trung tâm ngân hàng không hẳn liên quan đến tính toàn vẹn của thông tin gửi từ người gửi tới chi nhánh, bởi thông tin đã được băm và mã hóa để gửi đến đúng đích của nó tức chi nhánh, vấn đề còn lại vấn đề bảo mật của chi nhánh tới trung tâm của nó.
Tính không thể phủ nhận
Trong giao dịch, một bên có thể từ chối nhận một văn bản nào đó là do mình gửi. Để ngăn ngừa khả năng này, bên nhận có thể yêu cầu bên gửi phải gửi kèm chữ ký số với văn bản. Khi có tranh chấp, bên nhận sẽ dùng chữ ký này như một chứng cứ để bên thứ ba
giải quyết. Tuy nhiên, khóa bí mật vẫn có thể bị lộ và tính không thể phủ nhận cũng không thể đạt được hoàn toàn.
2.2.4 Quá trình thực hiện chữ ký số khóa công khai
Chữ ký số dựa trên nền tảng mật mã hóa khóa công khai. Để có thể trao đổi thông tin trong môi trường này, mỗi người sử dụng có một cặp khóa: một công khai và một bí mật. Khóa công khai được công bố rộng rãi còn khóa bí mật phải được giữ kín và khó có thể tìm được khóa bí mật trong thời gian chấp nhận được.
Toàn bộ quá trình gồm 3 thuật toán:
Thuật toán tạo khóa bí mật, khoá công khai
Thuật toán tạo chữ ký số bằng khoá bí mật
Thuật toán kiểm tra chữ ký số bằng khóa công khai
Hình 2.2. Sơ đồ mô tả quá trình nhận các tệp văn bản
Xét ví dụ: B muốn gửi thông tin cho A và muốn A biết thông tin đó thực sự do chính B gửi. B gửi cho A bản tin kèm với chữ ký số. Chữ ký này được tạo ra với khóa bí mật của B. Khi nhận được bản tin, A kiểm tra sự thống nhất giữa bản tin và chữ ký bằng thuật toán kiểm tra sử dụng khóa công khai của B. Bản chất của thuật toán tạo chữ ký đảm bảo nếu chỉ cho trước bản tin, rất khó tạo ra được chữ ký của B nếu không biết khóa bí mật của B. Nếu phép thử cho kết quả đúng thì A có thể tin tưởng rằng bản tin thực sự do B gửi.
2.3 Hàm băm [2, 6]
2.3.1 Khái niệm
Hàm băm là thuật toán không dùng khóa để mã hóa (ở đây dùng thuật ngữ “băm” thay cho “mã hóa”), nó có nhiệm vụ băm tài liệu và cho kết quả là một giá trị “băm” có kích thước cố định .
Hình 2.3. Minh họa hàm băm
2.3.2 Các hàm băm thông dụng
Các hàm băm dòng MD (MD2, MD4, MD5) do Rivest đề xuất. Giá trị băm theo các thuật toán này có độ dài cố định là 128 bit. Hàm băm MD4 đưa ra năm 1990. Một năm sau phiên bản mạnh hơn là MD5 cũng được đề xuất.
Hàm băm an toàn SHA, phức tạp hơn nhiều, cũng dựa trên phương pháp tương tự, được công bố trong Hồ sơ Liên bang năm 1992. Năm 1993 được chấp nhận làm tiêu chuẩn của Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST). Giá trị băm theo thuật toán này có độ dài cố định là 160 bit.
2.3.2.1 Thuật toán hàm băm MD5
a. Thuật toán hàm băm MD4
Input: Thông điệp là xâu a có độ dài b bit.
Output: Bản băm, đại diện cho thông điệp gốc, độ dài cố định 128 bit.
a). Tóm tắt thuật toán
Bước 1: Khởi tạo các thanh ghi
Có 4 thanh ghi để tính toán nhằm đưa ra các đoạn mã: A, B, C, D. Đại diện thông điệp được xây dựng như sự kết nối của các thanh ghi. Mỗi thanh ghi có độ dài 32 bit. Các thanh ghi này được khởi tạo bằng giá trị dạng hecxa.
word A := 67 45 23 01 word B := ef cd ab 89
word C := 98 ba dc fe word D := 10 32 54 76
Bước 2:
+ Tạo “Thông điệp đệm” M cho xâu a.
+ Chia mảng M thành các khối 512 bit, đưa từng khối 512 bit vào mảng T[j]. + Mỗi lần xử lý một khối 512 bit (16 word ), lặp lại N/16 lần.
b. Thuật toán hàm băm MD5
- MD5 (Message-Digest algorithm 5) là một hàm băm mật mã được sử dụng phổ