Chương 1. Tổng quan chữ ký điện tử và hệ chữ ký RSA Chương 2: Chứng thực số Chương 3. Xây dựng ứng dụng chứng thực số Chương 4. Mô tả cài đặt hệ thống thử nghiệm 6 Chƣơng 1 TỔNG QUAN CHỮ KÝ ĐIỆN TỬ VÀ HỆ CHỮ KÝ RSA 1.
Giới thiệu về chữ ký điện tử và những công cụ liên quan 1. Giới thiệu chung Trong cuộc sống ngày nay, chúng ta cần sử dụng chữ ký để xác nhận các văn bản tài liệu nào đó và có thể dùng con dấu với giá trị pháp lý cao hơn đi kèm với chữ ký. Về mặt lý tưởng thì: Chữ ký là bằng chứng thể hiện người ký có chủ định khi ký văn bản Chữ ký thể hiện “chủ quyền”, nó làm cho người nhận văn bản biết rằng ai chính xác là người đã ký văn bản. Chữ ký không thể “tái sử dụng”, tức là nó là một phần của văn bản mà không thể sao chép sang các văn bản khác.
Văn bản đã ký không thể thay đổi được. Chữ ký không thể giả mạo và cũng là thứ không thể chối bỏ( người đã ký văn bản không thể phủ định việc mình đã ký văn bản và người khác cũng không thể tạo ra chữ ký đó ). Cùng với sự phát triển nhanh chóng của công nghệ thông tin và sự bùng nổ của các dữ liệu số, các văn bản tài liệu được lưu dưới dạng số, dễ dàng được sao chép, sửa đổi. Nếu chúng ta sử dụng chữ ký truyền thống như trên sẽ rất dễ dàng bị giả mạo chữ ký.
Câu hỏi đặt ra là làm sao để có thể ký vào các văn bản, tài liệu số như vậy? Câu trả lời đó là sử dụng chữ ký điện tử! Chữ ký điện tử đi kèm với các thông tin chủ sở hữu và một số thông tin cần thiết khác sẽ trở thành Chứng chỉ điện tử. Chữ ký điện tử (tiếng Anh: electronic signature) là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, video.) nhằm mục đích xác định người chủ của dữ liệu đó. Để có được những đặc tính như trên, giao thức “ký trong thế giới điện tử “ cần phải có sự hỗ trợ của công nghệ mã hóa. Sơ đồ chữ ký số là phương pháp ký một thông tin được lưu dưới dạng điện tử.
Giao thức cơ bản của chữ ký số dựa trên ý tưởng của Diffie và Hellman [5]: 7 Người gửi (chủ nhân của văn bản) ký văn bản bằng cách mã hóa nó với khóa bí mật của mình Người gửi chuyển văn bản đã ký cho người nhận Người nhận văn bản kiểm tra chữ ký bằng việc sử dụng chìa khóa công khai của người gửi để giải mã văn bản. Khái niệm về chữ ký điện tử Chữ ký số dựa trên nền tảng mật mã khóa công khai, mỗi chủ thể truyền thông sẽ có một cặp khóa riêng – công khai, khóa riêng được chủ thể giữ bí mật và khóa công khai được công bố công khai, nếu chỉ biết khóa công khai thì không thể tìm ra khóa riêng tương ứng. Chữ ký điện tử là thông tin được mã hoá bằng khoá riêng của người gửi, được gửi kèm theo văn bản nhằm đảm bảo cho người nhận định danh, xác thực đúng nguồn gốc và tính toàn vẹn của tài liệu nhận được. Chữ ký điện tử thể hiện văn bản gửi đi là đã được ký bởi chính người sở hữu một khoá riêng tương ứng với một khóa công khai nào đó [5].
Hai khái niệm chữ ký số (digital signature) và chữ ký điện tử thường được dùng thay thế cho nhau. Khi sử dụng chữ ký số trong truyền thông sẽ đảm bảo được các tính chất sau: + Xác thực được định danh của người gửi và nguồn gốc của thông điệp bởi vì chỉ có người gửi mới có thể tạo ra chữ ký có giá trị và được xác minh đúng đắn khi sử dụng khóa công khai tương ứng để xác minh. + Bất kỳ một sự cố nào trên đường truyền đều dẫn đến kết quả quá trình xác minh chữ ký là không chính xác nên đảm bảo được tính toàn vẹn của dữ liệu được gửi. + Chỉ có người chủ khóa riêng mới có thể ký số, chính vì vậy mà người này sẽ không thể chối bỏ trách nhiệm của mình khi đã ký gửi các văn bản.
+ Không thể tạo ra một văn bản với một chữ ký có sẵn, chính vì vậy mà không thể dùng lại chữ ký. 8 Bản chất của quá trình ký lên bản tin chính là sử dụng khóa bí mật của mình để ký lên bản tin bằng hệ chữ ký khoá công khai. Nếu áp dụng đúng nghĩa như vậy thì sẽ nảy sinh một số vấn đề khi bản tin lớn, vấn đề này xuất phát từ chính bản thân chữ ký số là sử dụng hệ chữ ký khóa công khai. Chính vì vậy mà kỹ thuật sử dụng chữ ký số với hàm băm được đề cập trong mục tiếp theo là giải pháp sử dụng hiện nay.
Sử dụng chữ ký số bao gồm 2 quá trình: tạo chữ ký và kiểm tra chữ ký. Các thuật toán chữ ký điện tử cho phép xác định nguồn gốc, bảo đảm tính toàn vẹn của dữ liệu được truyền đi, đồng thời nó cũng bảo đảm tính không thể phủ nhận của thực thể đã ký thông tin. So sánh chữ ký điện tử với chữ ký truyền thống Chữ ký điện tử và chữ ký truyền thống có nhiều điểm khác nhau: Về tài liệu được ký: Với tài liệu thông thường, nó là một phần vật lý của tài liệu. Ngược lại, chữ ký số không phải theo kiểu vật lý gắn vào thông báo nên không nhìn thấy trên bức điện.
Về vấn đề kiểm tra chữ ký : Chữ ký thông thường được kiểm tra bằng cách so sánh nó với các chữ ký đã được xác thực khác. Điểm yếu của chữ ký thông thường là có thể giả mạo. Ngược lại, chữ ký số lại được kiểm tra nhờ dùng thuật toán kiểm tra công khai, bất kỳ ai cũng có thể kiểm tra được. Việc dùng một sơ đồ chữ ký an toàn có thể ngăn chặn được giả mạo.
Sơ đồ tổng quan của một hệ thống chữ ký điện tử Một sơ đồ chữ ký điện tử là bộ 5 (P, A, K, S, V) thoả mãn các điều kiện dưới đây: - P là tập hữu hạn các bức điện (thông điệp, bản rõ) có thể. - A là tập hữu hạn các chữ ký có thể. - K là tập không gian khoá (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 xác minh 9 Với mỗi khoá K k tồn tại một thuật toán ký SigK S và một thuật toán xác minh VerK V.
Mỗi Sigk: P → A và VerK : P x A → {TRUE, FALSE là những hàm sao cho mỗi bức điện x P và mỗi chữ ký y A thoả mãn phương trình dưới đây: True nếu y = sig(x) Ver (x, y) = False nếu y ≠ sig(x). Với mỗi K k, hàm SigK và VerK là các hàm đa thức thời gian. Hàm VerK sẽ là hàm công khai còn hàm SigK là bí mật. Không thể dễ dàng tính toán để giả mạo chữ ký của B trên bức điện x, nghĩa là với x cho trước chỉ có B mới có thể tính được y để Ver(x, y) = TRUE.
Một sơ đồ chữ ký không thể an toàn vô điều kiện vì một người C nào đó có thể kiểm tra tất cả chữ số y trên bức điện x nhờ dùng thuật toán Ver() công khai cho tới khi anh ta tìm thấy chữ ký đúng. Vì thế, nếu có đủ thời gian, C luôn có thể giả mạo chữ ký của B. Như vậy mục đích của chúng ta là tìm các sơ đồ chữ ký điện tử an toàn về mặt tính toán. Hàm băm mật mã Bởi vì tài liệu cần ký thường có chiều dài khá dài.
Một biện pháp để ký là chia tài liệu ra các đoạn nhỏ và sau đó ký lên từng đoạn và ghép lại. Nhưng phương pháp có nhược điểm là chữ ký lớn, thứ hai là ký chậm vì hàm ký là các hàm mũ, thứ ba là chữ ký có thể bị đảo loạn các vị trí không đảm tính nguyên vẹn của tài liệu. Chính vì điều đó mà khi ký thì người ta ký lên giá trị hàm băm của tài liệu, vì giá trị của hàm băm luôn cho chiều dài xác định. Các khái niệm và định nghĩa Các hàm băm là các hàm nén một đầu vào có độ dài tùy ý thành một kết quả có độ dài cố định.
Nếu các hàm băm thỏa mãn các yêu cầu bổ sung, thì chúng là một công cụ rất mạnh trong việc thiết kế các kỹ thuật để bảo vệ tính xác thực của thông tin. Một số tính chất cơ bản của hàm băm: 1. Có thể áp dụng với thông báo đầu vào có độ dài bất kỳ 10 2. Tạo ra giá trị băm y = h(x) có độ dài cố định 3.
h(x) dễ dàng tính được với bất kỳ x nào 4. 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 5. Tính chống xung đột yếu : Với mọi dữ liệu đầu vào x 1 cho trước không thể tìm được bất kỳ giá trị x2 nào (x2 khác x1) mà h(x2) = h(x1). 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 x1 và x2 phân biệt sao cho chúng có cùng giá trị băm (h(x1) = h(x2)) Phân loại: Hàm băm một chiều(one – way hash functions): Là hàm băm mang tính 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 [4] 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 Như vậy dựa theo các tính chất trên ta thấy hàm băm một chiều thỏa mãn tính chất (4) và tính chất (5), còn hàm băm kháng xung đột thỏa mãn tính chất (4) và (6).
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 r, giả sử được đánh số là x 1, x2,. 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 r.