CHƯƠNG 1: TỔNG QUAN VỀ CHỮ KÝ SỐ 1. Khái niệm Chữ ký thông thường (chữ ký tay) đã có từ lâu đời và là một phần vật lý của tài liệu, là phương tiện để xác thực nguồn gốc và nội dung của tài liệu đó. Ngoài ra, chữ ký tay còn có khả năng chống chối bỏ, tức là người gửi sau khi đã ký vào tài liệu thì không thể chối bỏ chữ ký của mình và tài liệu sau khi được ký thì không thể thay đổi được nội dung. Chữ ký tay là đại diện duy nhất cho người ký, không ai khác có thể giả mạo được và dễ dàng được nhận ra khi nhìn thấy.
Việc kiểm tra tính xác thực của chữ ký tay cũng được thực hiện bằng những phương pháp đơn giản (so sánh chữ ký tay trên tài liệu với các chữ ký đã đăng ký trước của người ký) nhằm khẳng định chữ ký đúng là của người ký và nội dung của tài liệu không bị sửa đổi hoặc thêm bớt. Đối với tài liệu điện tử, chữ ký tay không còn đảm bảo được tính năng của nó. Do đó cần phải có một phương tiện mới để thay thế chữ ký tay. Chữ ký số (hay còn gọi là chữ ký điện tử) đã ra đời và được đưa vào sử dụng một cách hiệu quả.1[1]: Chữ ký số (Digital Signature) là một dãy số, là kết quả của phép biến đổi mật mã trên thông báo nhằm cung cấp một phương tiện để kiểm tra tính xác thực của nguồn gốc thông báo, tính toàn vẹn của thông báo và tính không thể chối bỏ của người ký.
Thông thường, chữ ký số được biểu diễn dưới dạng một dãy số nhị phân. Chữ ký số được tạo ra trên cơ sở sử dụng tập hợp các quy tắc và tập hợp các tham số để xác định danh tính người ký cũng như kiểm tra tính toàn vẹn của dữ liệu. Trong đó, phương tiện cơ bản để thực hiện chữ ký số là công nghệ thông tin. Mỗi chữ ký số được tạo và được kiểm tra tính xác thực thông qua các lược đồ chữ ký số.
Mỗi lược đồ chữ ký số bao gồm thuật toán ký 𝑆𝑖𝑔𝐾 và thuật toán kiểm tra 𝑉𝑒𝑟𝐾. Mỗi người có một cặp khóa bao gồm khóa riêng 𝐷𝐾 và khóa công khai 𝐸𝐾 , trong đó khóa công khai thường được công bố một cách công khai hoặc phân phối thông qua chứng thực khóa công khai, còn khóa riêng được giữ bí mật tuyệt 1 đối và không thể tìm ra khóa riêng từ khóa công khai. Người gửi sử dụng thuật toán ký 𝑆𝑖𝑔𝐾 và khóa riêng 𝐷𝐾 để tạo ra chữ ký số, người nhận sử dụng thuật toán kiểm tra 𝑉𝑒𝑟𝐾 và khóa công khai 𝐸𝐾 tương ứng để kiểm tra tính xác thực của thông báo và tính xác thực của chữ ký số do người gửi tạo ra. Trong quá trình tạo và kiểm tra chữ ký, thông báo được thu gọn nhờ áp dụng thuật toán băm an toàn.
Một người không biết khóa riêng của người đã ký thông báo thì không thể tạo ra được chữ ký số đó nên chữ ký số là không thể bị giả mạo. Khi sử dụng khóa công khai tương ứng của người ký, bất kỳ ai cũng có thể kiểm tra tính xác thực của chữ ký số trên thông báo đã được ký. Trong thực tế sử dụng, các thông báo thường có độ dài bất kỳ và nói chung là dài. Trong khi đó một lược đồ chữ ký số chỉ ký được các thông báo ngắn.
Để ký được các thông báo dài người ta phải chia thông báo ra thành nhiều phần ngắn và ký vào tất cả các phần này rồi gửi đi. Những hạn chế cơ bản của giải pháp này là: - Có quá nhiều chữ ký số cho một thông báo làm giãn tin quá mức. - Do quá trình ký một chữ ký số cần thực hiện các phép toán tốn thời gian do đó thời gian để ký thông báo là không thể chấp nhận được. Các nhà phát triển mong muốn như trong trường hợp chữ ký viết tay, chữ ký có độ dài ngắn và hạn chế cho dù thông báo có độ dài bằng bao nhiêu.
Vì chữ ký số được ký cho từng bit của thông báo, nếu muốn chữ ký có độ dài hạn chế trên thông báo có độ dài tùy ý thì ta phải tìm cách rút gọn độ dài thông báo. Nhưng bản thân thông báo không thể rút ngắn được, nên chỉ còn cách tìm cho mỗi thông báo một thông báo thu gọn có độ dài hạn chế và thay việc ký trên thông báo, ta ký trên thông báo thu gọn. Để giải quyết vấn đề này ta sử dụng hàm băm mật mã. Trong lược đồ chữ ký số, với đầu vào là thông báo có độ dài hữu hạn tùy ý, hàm băm sẽ biến đổi thông báo này thành một thông báo rút gọn và sau đó sẽ dùng thuật toán ký để ký lên thông báo rút gọn đó.
Cụ thể, khi người ký cần ký vào thông báo R anh ta ký trên bản tóm lược thông báo 𝑧 = ℎ(𝑅) như sau: 𝑦 = 𝑆𝑖𝑔𝐾 (𝑧) và truyền cặp (𝑅, 𝑦) lên kênh truyền thông. Quá trình kiểm tra được thực 2 hiện thông qua việc tính 𝑧 = ℎ(𝑅) dùng hàm băm công khai h và kiểm tra xem hàm 𝑉𝑒𝑟𝐾 (𝑧, 𝑦) có nhận giá trị “đúng” hay không. Cụ thể, quá trình tạo và kiểm tra chữ ký số được mô tả trong hình 1. Sơ đồ tạo và kiểm tra chữ ký số Quá trình tạo chữ ký số: Khi A cần gửi một thông báo cho B, A sử dụng thuật toán hàm băm để thu gọn thông báo ban đầu nhằm tạo ra bản tóm lược của thông báo.
Tiếp đến, A sử dụng thuật toán ký với đầu vào là bản tóm lược của thông báo và khóa riêng của A để tạo ra một chữ ký số. Sau đó chữ ký số và chứng chỉ cung cấp khóa công khai của A được gắn vào thông báo đã được ký rồi gửi cho B. Quá trình kiểm tra chữ ký số: B cũng sử dụng thuật toán hàm băm tương tự như của A để tạo bản tóm lược của thông báo đã nhận. B sử dụng khóa công khai được cung cấp để giải mã chữ ký và thu được một dãy bit, so sánh kết quả này với bản tóm lược vừa tạo.
Nếu kết quả là giống nhau thì thông báo trên chính là của A gửi cho B. 3 Trong trường hợp thông báo cần giữ bí mật thì A có thể mã hóa dữ liệu được ký trước khi gửi. Một lược đồ chữ ký số là bộ 5 (ℛ, 𝒜, 𝒦, 𝒮, 𝒱), trong đó: 1. ℛ là tập hữu hạn các thông báo có thể.
𝒜 là tập hữu hạn các chữ ký số có thể. 𝒦 không gian khóa là tập hữu hạn các khóa có thể. Với mỗi khóa 𝐾 ∈ 𝒦, tồn tại một thuật toán ký 𝑆𝑖𝑔𝐾 ∈ 𝒮 và một thuật toán kiểm tra chữ ký 𝑉𝑒𝑟𝐾 ∈ 𝒱. Mỗi thuật toán ký 𝑆𝑖𝑔𝐾 : 𝑅 → 𝒜 và thuật toán kiểm tra chữ ký 𝑉𝑒𝑟𝐾 : ℛ × 𝒜 →{đúng, sai} là những hàm thỏa mãn điều kiện dưới đây: đú𝑛𝑔, 𝑛ế𝑢 𝑦 = 𝑆𝑖𝑔𝐾 (𝑥) 𝑉𝑒𝑟𝐾 (𝑥, 𝑦) = { 𝑠𝑎𝑖, 𝑛ế𝑢 𝑦 ≠ 𝑆𝑖𝑔𝐾 (𝑥) với mọi thông báo 𝑥 ∈ ℛ và mọi chữ ký 𝑦 ∈ 𝐴.
Với mỗi khóa 𝐾 ∈ 𝒦, các hàm 𝑆𝑖𝑔𝐾 và 𝑉𝑒𝑟𝐾 là các hàm thời gian đa thức. 𝑉𝑒𝑟𝐾 sẽ là hàm công khai còn 𝑆𝑖𝑔𝐾 là hàm bí mật. Hàm 𝑆𝑖𝑔𝐾 là khó tính được nếu không biết khóa riêng 𝐾, điều này đảm bảo cho tính bí mật của chữ ký và chống việc giả mạo chữ ký. Nghĩa là cho trước thông báo x, chỉ có người có khóa riêng K mới có thể tính được chữ ký y để 𝑉𝑒𝑟𝐾 (𝑥, 𝑦) = đú𝑛𝑔.
Một số lược đồ ký số phổ biến hiện nay 1. Lược đồ chữ ký số RSA Lược đồ chữ ký RSA có độ phức tạp tính toán phụ thuộc vào việc giải quyết bài toán lũy thừa theo modulo các số rất lớn. Lược đồ chữ ký RSA được đề xuất năm 1977 bởi 3 nhà nghiên cứu Rivest, Shamir và Adleman, đây là lược đồ có ứng dụng thực tế rộng rãi nhất dựa trên công nghệ sử dụng khóa chung. Các phương pháp tấn công RSA đầu tiên (Multicative Property) và các vấn đề khác liên quan tới chữ ký RSA được đưa ra bởi Davia và Jonge và Chaum.
Bài toán xác thực bằng chữ ký số có thể xem là bài toán "đối ngẫu" với bài toán bảo mật bằng mật mã, do đó dùng ngược thuật toán lập mã RSA ta có thể được một lược đồ chữ ký RSA. Lược đồ chữ ký số RSA được xây dựng như sau: 4 Gửi ( R, S A ) cho B A B EB = (nB , eB ) Công bố EB DA = d A Công bố EA DB = d B E A = (n A , e A ) Lấy EA Ký: S A = R d A mod n A Kiểm tra: R = S AeA mod n A Hình 1.2: Sơ đồ hoạt động của lược đồ chữ ký số RSA Tạo khóa: Mỗi đầu mối trong mạng liên lạc cần tạo một cặp khóa: khóa công khai và khóa riêng bí mật: 1. Tạo 2 số nguyên tố lớn ngẫu nhiên và khác nhau 𝑝, 𝑞; trong đó 𝑝 và 𝑞 có độ lớn xấp xỉ nhau. Chọn một số nguyên ngẫu nhiên 𝑒, (0 < 𝑒 < 𝜙(𝑛)) sao cho 𝑔𝑐𝑑 (𝑒, 𝜙(𝑛)) = 1.
Tính 𝑑 = 𝑒 −1 𝑚𝑜𝑑 𝜙(𝑛) bằng cách dùng thuật toán Euclide mở rộng. Đặt 𝛼𝑅 = 𝐴 = 𝑍𝑛 , 𝐾 = {(𝑛, 𝑒, 𝑑): 𝑒𝑑 ≡ 1 𝑚𝑜𝑑 𝜙(𝑛)}ta có khóa công khai là 𝐸𝐾 = (𝑒, 𝑛), khóa riêng bí mật là 𝐷𝐾 = 𝑑. Tạo chữ ký số: Giả sử A phải tạo một chữ ký số để xác thực cho thông báo 𝑅 gửi cho B. Khi đó A làm như sau: 1.
Biểu diễn bản rõ 𝑅 dưới dạng một số nguyên trong đoạn [0, 𝑛 − 1]. Sử dụng thuật toán ký với khóa riêng của mình để tạo chữ ký số trên thông báo R: 𝑆 = 𝑆𝑖𝑔𝐷𝐾 (𝑅) = 𝑅𝑑 𝑚𝑜𝑑 𝑛. Gửi thông báo R kèm theo chữ ký số S cho B. Kiểm tra chữ ký: Với chữ ký S và thông báo R, B có thể kiểm tra chữ ký số S để xác thực thông báo R theo các bước sau: 1.
Nhận khóa công khai 𝐸𝐴 = (𝑒, 𝑛) của người ký A.