Hệ chữ ký ElGammal được đưa ra vào 1985. Một phiên bản sửa đổi hệ này được Học viện Quốc gia tiêu chuẩn và kỹ thuật (NIST) đưa ra như một chuẩn của chữ ký điện tử.
Hệ chữ ký ElGammal được thiết kế riêng biệt cho mục đích chữ ký, trái ngược với RSA thường được sử dụng cho cả mục đích mã hoá công khai và chữ ký. Hệ chữ ký ElGammal là không xác định, nghĩa là có rất nhiều giá trị chữ ký cho cùng một bức điện cho trước. Thuật toán xác minh phải có khả năng nhận bất kỳ giá trị chữ ký nào như là việc xác thực.
Chữ ký số MTA 11.15-01 là chữ ký số dựa trên hệ chữ ký Elgammal được xây dựng trên thuật toán khóa công khai.
3.2Hàm băm mật mã
3.2.1 Giới thiệu
Một hàm băm (Hash) với một số tính chất bảo mật nhất định để phù hợp việc sử dụng trong nhiều ứng dụng bảo mật thông tin đa dạng, chẳng hạn như chứng thực (authentication) và kiểm tra tính nguyên vẹn của thông điệp (message integrity). Một hàm băm nhận đầu vào là một xâu ký tự dài (hay thông điệp) có độ dài tùy ý và tạo ra kết quả là một xâu ký tự có độ dài cố định. Trong nhiều chuẩn và ứng dụng, hai hàm băm thông dụng nhất là MD5 và SHA-1.
Nói rộng, một hàm băm phải hoạt động càng giống với một hàm ngẫu nhiên càng tốt, trong khi vẫn có tính chất đơn định và tính toán có hiệu quả. Phân loại:
• cho một tóm tắt (digest), tìm một thông điệp (chưa biết) khớp với tóm tắt đó
• tìm các "xung đột băm" (hash collision), trong đó hai thông điệp khác nhau có tóm tắt trùng nhau.
Nếu có thể thực hiện một trong hai việc trên, một người có thể tấn công bằng cách dùng các cách trên để thay một thông điệp không được xác nhận (unauthorized message) vào chỗ của một thông điệp được xác nhận.
Về lý tưởng, việc tìm hai thông điệp có tóm tắt rất giống nhau cũng nên không khả thi; người ta không muốn một kẻ tấn công có thể tìm hiểu được điều gì đó hữu ích về một thông điệp nếu biết tóm tắt.
3.2.2 Các khái niệm và định nghĩa
Hàm băm là một giải thuật nhằm sinh ra các giá trị băm tương úng với mỗi khối dữ liệu. Giá trị băm đóng vai trò gần như một khóa để phân biệt các khối dữ liệu.
Hàm băm một chiều : (one - way hash functions): Là hàm băm mang chất: với mọi mã băm biết trước, không thể tính toán để tìm được chuỗi bit ban đầu vào có mã băm bằng với mã băm đã cho.
Hàm băm kháng xung đột: (collision resistant hash funtions) là hàm băm mang tính chất: không thể tính toán để tìm ra hai chuỗi bit có cùng giá trị băm Một số tính chất cơ bản của hàm băm :
(i) Có thể áp dụng với thông báo đầu vào có độ dài bất kỳ (ii) Tạo ra giá trị băm y = h(x) có độ dài cố định
(iii) h(x) dễ dàng tính được với bất kỳ X nào
(iv) Tính một chiều : Với mọi đầu ra y cho trước không thể tìm được x’ sao cho h(x’) bằng giá trị y cho trước
(v) Tính chống xung đột yếu : Với mọi dữ liệu đầu vào xl cho trước không thể tìm được bất kỳ giá trị x2 nào (x2 khác xl) mà h(x2) = h(xl).
(vi) Tính chống xung đột mạnh : Không thể tính toán đ tìm được hai dữ liệu đầu vào xl và x2 phân biệt sao cho chứng có cùng giá trị băm (h(xl)=h(x2))
Như vậy dựa theo các tính chất tren ta thấy hàm băm một chiều thỏa mãn tính chất (iv) và tính chất (v), còn hàm băm kháng xung đột thỏa mãn tính chất (iv) và (vi).
3.2.3 Cấu trúc cơ bản của thuật toán băm
Khối dữ liệu đầu vào X có chiều dài hữu hạn tùy ý sẽ được phân thành các khối con liên tiếp có chiều dài cố định Г, giả sử được đánh số là xl,x2,...,xm. Tuy nhiên do chiều dài của khối dữ liệu ban đầu X là tùy ý, do đó cần phải thêm vào dữ liệu ban đầu một số bit phụ sao cho tổng số bit của khối dữ liệu x’ sau khi thêm vào sẽ là bội số của Г. Ngoài ra khối bit thêm vào thường chứa một khối bit (có chiều dài cố định trước, thường là 64 bit) xác định chiều dài thực sự của khối bt dữ liệu khi chưa thêm các bit phụ.
Tiếp theo, lần lượt cắt các khối con г bit từ khối mở rộng x\ Mỗi khối con г bit Xi lần lượt bước qua một hàm nén f của hàm băm h(x). Tại bước thứ i, hàm nén f nhận dữ liệu đàu vào là Xi và kết quả trung gian của bước trước đó (bước i - 1) để tạo đầu ra là kết quả trung gian bước thứ i, được ký hiệu là Hi. Kết quả trung gian tại mỗi bước Hi là một chuỗi bit có độ dài cố định bằng n > 0.
Kết quả ký hiệu IV là giá trị ban đầu (cho H0 ), thì quá trình lặp xử lý dãy các khối con xl,x2,..,xm được mô tả :
Các biến Hi là các biến dây chuyền
tìm. Trong hầu hết các thuật toán g(x) thường được chọn là ánh xạ đồng nhất tức là g(Hn = Hm ).
Khâu then chốt trong xây dựng hàm băm là thiết kế hàm nén f.
Giá trị của hàm băm mật mã của một thông điệp được gọi là Message Digest (MD).
Một số hàm băm mật mã thông dụng: MD4, MD5 và SHA-1...
Hình 3.1 Mô tả hàm băm
3.2.4 Giải thuật SHA-1
Trong mật mã học, SHA-1 là một hàm băm mật mã được thiết kế bởi Cơ Quan An Ninh Quốc Gia và được công bố bởi NIST hay còn gọi là Cục Xử Lý Thông Tin Tiêu Chuẩn Liên Bang của Mỹ.
SHA-1 là thuật toán “băm” một chiều (hash) dùng trong rất nhiều hệ thống như SSH, SSL, S/MIME, PGP, IPSec, VPNs… Nó được Cơ quan an ninh quốc gia Mỹ phát minh năm 1995 và trở thành chuẩn bảo mật cơ sở phổ biến
nhất trên Internet và là thuật toán chữ ký điện tử duy nhất được Cơ quan Chuẩn Chữ ký Số của chính phủ Mỹ phê chuẩn.
SHA được phát triển bởi cục quốc gia an ninh Hoa Kỳ gọi tắt là(NSA) và được xuất bản thành chuẩn của chính phủ Hoa Kỳ bởi viện công nghệ và chuẩn quốc gia Hoa Kỳ(NIST) vào năm 1993 và được gọi là SHA-0.
Năm thuật giải SHA là SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết quả dài 224 bit), SHA-256 (trả lại kết quả dài 256 bit), SHA-384 (trả lại kết quả dài 384 bit), và SHA-512 (trả lại kết quả dài 512 bit). Thuật giải SHA là thuật giải băm mật được phát triển bởi cục an ninh quốc gia Mĩ (National Security Agency hay NSA) và được xuất bản thành chuẩn của chính phủ Mĩ bởi viện công nghệ và chuẩn quốc gia Mĩ (National Institute of Standards and Technology hay NIST). Bốn thuật giải sau thường được gọi chung là SHA-2.
SHA là viết tắt của Secure Hash Algorithm. Ba thuật toán SHA có cấu trúc khác nhau và được phân biệt là: SHA-0, SHA-1, và SHA-2 . SHA-1 gần tương tự như SHA-0, nhưng sửa chữa một lỗi trong các đặc tả kỹ thuật gốc của hàm băm SHA dẫn đến những điểm yếu quan trọng. Các thuật toán SHA-0 đã không được sử dụng trong nhiều ứng dụng. SHA-2 mặt khác có những điểm khác biệt quan trong so với hàm băm SHA-1.
Algorithm and 3variant Output size Block Size Max Message Size Word Size Round Collisions Found ? SHA-0 160 512 264 − 1 32 80 Yes SHA-1 Theoretical attack ? SHA -2 SHA- 224/256 224/256 512 264 − 1 32 64 No SHA- 384/512 384/512 1024 2128 − 1 64 80
Hình 3.3 Các tính chất của các thuật toán băm SHA
- SHA-1 là 1 phần trong các ứng dụng bảo mật được sử dụng rộng rãi trong các giao thức như:TLS và SSL,PGP,SSH và IPSEC…
- Các SHA-1 có thể được sử dụng với các DSA trong thư điện tử,chuyển tiền điện tử,phân phối phần mềm,lưu trữ dữ liệu,và các ứng dụng khác cần đảm bảo tính toàn vẹn DL và xác thực nguồn gốc DL. Các SHA-1 cũng có thể sử dụng bất cứ khi nào nó là cần thiết để tạo ra 1 phiên bản đặc của tin nhắn. - Hàm SHA-1 còn được sử dụng trên Wii của Nintendo để xác minh chữ ký
thời gian khởi động.
- SHA-1 và SHA-2 là những thuật toán băm an toàn theo yêu cầu của pháp luật để sử dụng trong một số ứng dụng của Chính Phủ Hoa Kỳ, bao gồm cả sử dụng trong các thuật toán mã hóa khác và các giao thức, để bảo vệ thông tin mật nhạy cảm.Nhưng hiện nay thì Chính Phủ không còn sử dụng SHA-1 nữa nhưng thay vào đó là SHA-2.
Các hàm băm SHA được dùng làm cơ sở cho mã khối SHACAL.
3.3Mã hóa khóa riêng và mã hóa khóa công khai
3.3.1 Một số thuật ngữ và khái niệm
Mã hóa là phương pháp để biến thông tin (phim ảnh, văn bản, hình ảnh…) từ định dạng bình thường sang dạng thông tin không thể hiểu được nếu không có phương tiện giải mã. Văn bản là một thông báo gốc cần chuyển có định dạng là văn bản, âm thanh, hình ảnh, chữ số…
Văn bản mã thường được ký hiệu là CT (ciphertext)
Hệ mã là một phương pháp mã hóa văn bản.
Thám mã là nghệ thuật phá các hệ mã
Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu, quá trình ngược của mã hóa.
Khóa là bí quyết lập mã và giải mã. Nếu như việc mã hóa được xem như một hàm y = f(x,k), trong đó X là văn bản đầu vào, còn k là một tham số điều khiển, f là phương pháp mã hóa. Trước đây bí quyết thường là cả f và k. Do yêu cầu hiện nay công nghệ mã hóa đã phải thay đổi quan điểm này. Phương pháp f thường không do một người nắm giữ nên không thể giữ bí mật nên phải coi nó là công khai. Tham số điều khiển k, có tác dựng làm thay đổi kết quả và được coi là chìa khóa mã. Thông thường nó là một xâu bit mà người sử dựng có thể giữ riêng cho mình.
Nguyên tắc chung của mã hóa là việc giải mã phải rất dễ dàng với người trong hệ thống sử dụng, và ngược lại rất khó giải mã (thậm chí không thực hiện được) đối với người ngoài.
3.3.2 Các hệ mã hóa
Hệ mã bí mật (secret key cryptosystem) hay hệ mã đối xứng là hệ mã hóa mà trong đó việc lập mã và giải mã cùng sử dụng chung một khóa.
Hệ mã công khai (public key cryptosystem) hay mã hóa phi đối xứng là hệ mã mà trong đó việc lập mã và giải mã sử dựng 2 chìa khóa riêng biệt, từ chìa khóa này không thể tìm ra chìa khóa kia và ngược lại. Khóa được dùng để mã hóa gọi là khóa công khai, còn khóa giành cho việc giải mã, luôn được giữ bí mật gọi là khóa riêng
3.3.3 Ứng dụng của mã hóa
đảm bảo bí mật, toàn vẹn của thông tin, khi thông tin đó được truyền trên mạng.Mã hóa cũng là nền tảng của kĩ thuật chữ ký điện tử, hệ thống PKI...
3.3.4 Hệ mã hóa bí mật và những hạn chế
3.4Mã hóa khóa công khai
Mã hóa đối xứng dù rằng đã phát triển từ cổ điển đến hiện đại, vẫn tồn tại hai điểm yếu sau:
Vấn đề trao đổi khóa giữa người gửi và người nhận: Cần phải có một kênh an toàn để trao đổi khóa sao cho khóa phải được giữ bí mật chỉ có người gửi và người nhận biết. Điều này tỏ ra không hợp lý khi mà ngày nay, khối lượng thông tin luân chuyển trên khắp thế giới là rất lớn. Việc thiết lập một kênh an toàn như vậy sẽ tốn kém về mặt chi phí và chậm trễ về mặt thời gian.
Tính bí mật của khóa: không có cơ sở quy trách nhiệm nếu khóa bị tiết lộ.
Vào năm 1976 Whitfield Diffie và Martin Hellman đã tìm ra một phương pháp mã hóa khác mà có thể giải quyết được hai vấn đề trên, đó là mã hóa khóa công khai (public key cryptography) hay còn gọi là mã hóa bất đối xứng (asymetric cryptography). Đây có thể xem là một bước đột phá quan trọng nhất trong lĩnh vực mã hóa.
Xét lại mô hình mã hóa đối xứng:
Hình 3.4 Mã hóa khóa công khai
Để khắc phục điểm yếu của mã hóa đối xứng người ta tập trung vào nghiên cứu theo hướng: có phương pháp nào để việc mã hóa và giải mã dùng hai khóa khác nhau? Có nghĩa là c = E(p, Ki) và p = D(c, K2). Nếu thực hiện được như vậy thì chúng ta sẽ có 2 phương án áp dụng:
Phương án 1: người nhận (Bob) giữ bí mật khóa K2, còn khóa Ki thì
công khai cho tất cả mọi người biết. Alice muốn gởi dữ liệu cho Bob thì dùng khóa Ki để mã hóa. Bob dùng K2 để giải mã. Ở đây Trudy cũng biết khóa Ki, tuy nhiên không thể dùng chính Ki để giải mã mà phải dùng K2. Do đó chỉ có duy nhất Bob mới có thể giải mã được. Điều này bảo đảm tính bảo mật của quá trình truyền dữ liệu. Ưu điểm của phương án này là không cần phải truyền khóa Ki trên kênh an toàn.
Phương án 2: người gửi (Alice) giữ bí mật khóa Ki, còn khóa K2 thì công
khai cho tất cả mọi người biết. Alice muốn gởi dữ liệu cho Bob thì dùng khóa Ki để mã hóa. Bob dùng K2 để giải mã. Ở đây Trudy cũng biết khóa K2 nên Trudy cũng có thể giải mã được. Do đó phương án này không đảm bảo tính bảo mật. Tuy nhiên lại có tính chất quan trọng là đảm bảo tính chứng thực và tính không từ chối. Vì chỉ có duy nhất Alice biết được khóa Ki, nênnếu Bob dùng K2 để giải mã ra bản tin, thì điều đó có nghĩa là Alice là người gửi bản mã. Nếu Trudy cũng có khóa Ki để gửi bản mã thì Alice sẽ bị quy trách
nhiệm làm lộ khóa Ki. Trong phương án này cũng không cần phải truyền K2 trên kênh an toàn.
Vì vậy nếu kết hợp phương án 1 và phương án 2, thì mô hình đề xuất của chúng ta khắc phục được các nhược điểm của mã hóa đối xứng.
Trong cả hai phương án, một khóa được giữ bí mật chỉ một người biết, còn khóa kia được công khai. Do đó mô hình mã hóa trên được gọi là mã hóa khóa công khai (hay mã hóa bất đối xứng). Để thuận tiện ta quy ước lại các ký hiệu như sau:
- Để tránh nhầm lẫn với khóa bí mật của mã đối xứng, khóa bí mật trong mô hình trên được gọi là khóa riêng (private key) và ký hiệu là Kr.
- Khóa công khai (public key) được ký hiệu là Ku.
- Bản rõ được ký hiệu là M, còn bản mã giữ nguyên, ký hiệu là C
- Phương án 1 viết lại thành: C = E(M, Ku)
M = D(C, Kr)
- Phương án 2 viết lại thành: C = E(M, Kr)
M = D(C, Ku)
Vấn đề còn lại ở đây là liệu có tồn tại một mô hình mã hóa và giải mã dùng hai khóa khác nhau như vậy không? Dĩ nhiên là hai khóa Ku và Kr không thể nào hoàn toàn độc lập với nhau. Phải có một mối quan hệ nào đó giữa Ku và Kr thì mới có thể tiến hành giải mã hóa và giải mã được. Có nghĩa là Kr = f(Ku). Tuy nhiên một yêu cầu rất quan trọng là việc tính Kr = f(Ku) phải là bất khả thi về mặt thời gian. Nếu nguyên tắc này bị vi phạm thì việc giữ bí mật khóa Kr không còn ý nghĩa vì từ khóa công khai Ku có thể tính được Kr.
Để có được cặp khóa Kr và Ku như trên, người ta thường dùng các hàm một chiều (oneway function). Các hàm một chiều có tính chất là hàm nghịch đảo của chúng rất khó thực hiện. Sau đây là ví dụ về hàm một chiều: việc
sinh ra hai số nguyên tố lớn p, q và tính tích N = pq thì thực hiện dễ dàng. Tuy nhiên nếu chỉ cho trước N và thực hiện phân tích N để tìm lại hai số nguyên tố p, q là việc hoàn toàn bất khả thi về mặt thời gian. Chúng ta sẽ xem