2.4.2.1 Sơ đồ
Bước 1. Tạo cặp khóa (bí mật, công khai) (a, h) :
Input 2 số nguyên tố lớn phân biệt p và q
Output Cặp (a,h) là khóa công khai và khoá bí mật
Thuật toán
- 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 q là ước nguyên tố của p -1. Tức là p -1 = t * q hay p = t * q + 1. (Số nguyên tố p cỡ 512 bit, q cỡ 160 bit).
- Chọn g Zp* là căn bậc q của 1 mod p, (g là phần tử sinh của Zp* ). Tính = g t, chọn khóa bí mật a Zp*, tính khóa công khai ha
mod p. - Đặt P = Z q*, A = Z q* x Z q* ,
K = (p, q, , a, h)/ a Zp*, h a
mod p.
- Với mỗi khóa (p, q, , a, h), k‟ = a bí mật, k” = (p, q, , h) công khai.
Dùng 2 khóa ký :khóa a và khóa ngẫu nhiên bí mật rZ q*. Chữ ký trên xZp* là Sig k’ (x, r) = (, ),
Trong đó = ( r
mod p) mod q, = ((x + a * ) * r-1 mod q (Chú ý r Z q*, để bảo đảm tồn tại r-1 mod q).
Bước 3. Kiểm tra chữ ký: Với e1 = x * -1 mod q, e2 = * -1 mod q. Ver k” (x, , ) = đúng (e1 * he2 mod p) mod q = 2.4.2.2 Ví dụ
Bước 1.Tạo cặp khóa (bí mật, công khai) (a, h) :
- Chọn p = 7649, q = 239 là ước nguyên tố của p -1, t = 32.
- Tức là p -1 = t * q hay p = t * q + 1 = 32*q + 1 =32*239 + 1= 7649. - Chọn g =3 Z7649 là phần tử sinh. =g t mod p = 3 32mod 7649= 7098 - Chọn khóa mật a = 85,
khóa công khai h = a
mod p = 709885 mod 7649 = 5387.
Bước 2. Ký số:
- Dùng 2 khóa ký: a và khóa ngẫu nhiên r = 58 Z q*, r-1 mod q = 136. - Chữ ký trên x = 1246là Sig k’ (x, r) = (, ) = (115, 87)
Trong đó: = (r
mod p) mod q = (709858 mod 7649) mod 239 = 593 mod 239 = 115. = (x + a * ) * r-1 mod q = (1246 + 85 * 115) *136 mod 239 = 87.
Bước 3. Kiểm tra chữ ký:
(, ) = (115, 87) là chữ ký đúng trên x = 1246. e1 = x * -1
mod q = 1246 * 11 mod q = 83, e2 = * -1
mod q = 115 * 11 mod q = 70. Điều kiện kiểm thử đúng (e1
* he2 mod p) mod q = , với -1 = 11. (709883 * 538770 mod 7649) mod 239 = 593 mod 239 = 115 = .
2.4.2.3 Độ an toàn của chữ ký DSA
a. Liên quan tới các tính toán cụ thể trong sơ đồ:
- Chú ý rằng phải có 0 (mod q) để bảo đảm có -1
mod q trong điều kiện kiểm thử (tương đương UCLN(, p-1) = 1). Vì vậy nếu chọn r mà không được điều kiện trên, thì phải chọn r khác để có 0 (mod q). Tuy nhiên khả năng 0 mod q là 2-160 , điều đó hầu như không xảy ra. Một chú ý là là thay vì tính p trước rồi mới tính q, ta sẽ tính q trước rồi tìm p.
b. Liên quan chung tới DSS (1991):
- Độ dài cố định của p là 512 bit. Nhiều người muốn p có thể thay đổi lớn hơn. Vì thế NIST sửa đổi là p có độ dài thay đổi, là bội của 64: từ 512 đến 1024 bit.
- Nếu dùng chữ ký RSA với thành phần kiểm tra chữ ký là nhỏ, thì việc kiểm tra nhanh hơn việc ký. Đối với DSS, ngược lại, việc ký nhanh hơn kiểm tra. Điều này dẫn đến vấn đề:
Một tài liệu chỉ được ký một lần, nhưng nó lại được kiểm tra nhiều lần, nên người ta muốn thuật toán kiểm tra nhanh hơn.
Máy tính ký và kiểm thử như thế nào? Nhiều ứng dụng dùng thẻ thông minh với khả năng có hạn, kết nối với 1 máy tính mạnh hơn, vì vậy nên xây dựng sơ đồ chữ ký ít liên quan đến thẻ. Nhưng tình huống đặt ra là một thẻ thông minh có thể sinh ra chữ ký và cũng có thể kiểm tra chữ ký, do vậy rất khó kết luận ? Do đó NIST trả lời rằng thời gian kiểm tra và sinh chữ ký, cái nào nhanh hơn không quan trọng, miễn là đủ nhanh.
2.5 Kết luận chương
Chữ ký số là tập con của chữ ký điện tử. Chữ ký điện tử 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 đó. Chữ ký số khóa công khai (hay hạ tầng khóa công khai) 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ý. Hiện tại có 2 loại chữ ký số là: RSA và DSA. Trong đó RSA được sử dụng cho cả mã hóa và chữ ký số, còn DSA chỉ dùng tạo chữ ký số. Trong đó độ an toàn của RSA phụ thuộc vào bài toán phân tích một số nguyên m thành thừa số lại cần đến một thời gian tăng theo cấp số luỹ thừa so với chiều dài của m. Mà thuật toán phân tích một số nguyên m thành thừa số lại cần đến một thời gian tăng theo cấp số luỹ thừa so với chiều dài của m . Nghĩa là nếu chỉ thêm cho m vài ký tự, thời gian cần để đặt m thành thừa số sẽ tăng gấp đôi. Vì khi thêm vài ký tự vào R là làm cho nó lớn thêm hàng trăm hay ngàn lần nhiều hơn, tức là gia tăng danh sách các cặp thừa số có thề dùng làm p và q. Vậy nếu giả như bất ngờ có ai tìm ra được một kỹ thuật mới giúp cho việc đặt thành thừa số có thể thực hiện hàng tỷ tỷ lần nhanh hơn, thì ta chỉ cần chọn một số m khác dài hơn chừng mười ký tự, tình trạng sẽ trở lại như ban đầu... Thuật toán RSA chỉ bị phá vỡ khi tìm được một cách nào đó cho ta trực tiếp các thừa số nguyên tố của một số . Cho đến bây giờ việc đó chưa được chứng minh là bất khả. Hệ mã hóa khóa công khai còn được dùng để tạo ra sơ đồ ký số hay các giao thức phục vụ bảo đảm an
toàn thông tin. Khác với hệ mã hóa khóa bí mật, với hệ mã hóa khóa công khai, hai đối tác truyền tin an toàn không phải “thống nhất“ khóa mật, do đó không có lỗi lo chung để quản lý khóa mật (tất nhiên từng người phải lo bảo vệ khóa mật của mình), nhưng họ phải có nỗi lo chung để quản lý “khóa công khai”. Vậy tại sao phải quản lý khoá công khai?
Để dễ hiểu chúng ta tìm hiểu hai ví dụ sau:
Ví dụ 1:
Người dùng A có khóa bí mật a, bị lộ với người dùng B, như vậy B có khoá mật a. Nếu đối tác C của A vẫn dùng khóa công khai b (tương ứng với a) để mã hóa bản tin gửi cho A, thì B có thể xem được bản tin này (vì B đã có khóa mật a để giải mã).
Giải pháp: Người dùng A phải báo với các đối tác của mình rằng khóa mật a đã bị lộ, không dùng khóa công khai b để mã hóa nữa, vì người B có khoá a sẽ xem được các bản tin mật, đã mã hóa bởi khóa b. Người dùng A phải chọn cặp khóa (a, b) mới và công bố khóa công khai mới b.
Ví dụ 2:
Người dùng A có khóa bí mật a, bị lộ với người dùng B, như vậy B có khoá mật a. Nếu A không thông báo với các đối tác của mình, thì B sẽ dùng a làm “khóa ký” ký lên các thông điệp giả mạo. Tuy nhiên nhờ khóa công khai b (tương ứng với a), các đối tác của A vẫn kiểm thử được rằng đó chính là chữ ký của A.
Giải pháp: Trong trường hợp trên, người dùng A phải báo với các đối tác của mình rằng khóa mật a đã bị lộ, không dùng khóa công khai b để kiểm tra chữ ký của A nữa. Người dùng A cũng phải chọn cặp khóa (a, b) mới và công bố khóa công khai mới b.
Vấn đề tiếp theo đặt ra là từng người dùng phải lo quản lý “khóa công khai” của riêng họ, hay có cơ quan chung để quản lý “khóa công khai” của mọi người dùng. Chúng ta sẽ biết được câu trả lời ở chương sau.
Chương 3. Chứng thực khóa công khai
3.1 Giới thiệu
Chương trước chúng ta đã tìm hiểu về chữ ký số và chúng ta cũng biết được rằng phải quản lý khóa công khai thật tốt khoá công khai nhưng vấn đề đặt ra ở đây là người dùng phải lo quản lý “khóa công khai” của riêng họ, hay có cơ quan chung để quản lý “khóa công khai” của mọi người dùng. Câu trả lời: Người dùng phải lo quản lý khoá riêng (khoá bí mật) là điều tự nhiên. Nhưng từng người dùng không đủ sức để quản lý “khóa công khai” của mình, vì nó đã được công khai cho nhiều người biết. Trên thực tế có một cơ quan chuyên lo cung cấp và quản lý một “giấy chứng nhận” có cơ sở pháp lý để chứng thực “khóa công khai” nào đó hiện thời do ai sở hữu. “Giấy chứng nhận” này được gọi là “chứng chỉ số”. Khi người dùng bị lộ khóa bí mật, họ phải báo cho cơ quan này biết, để xin được cấp “chứng chỉ số” cho “khóa công khai” mới. Mọi người xem chứng chỉ số, sẽ biết được khóa công khai nào còn hiệu lực, nhờ đó tránh được các tình huống tương tự như hai ví dụ ở cuối chương 2.
Hiện nay trên thế giới người ta theo xu hướng tổ chức các cơ quan như trên để cung cấp và quản lý các “khóa công khai” của người dùng. Tổ chức này được gọi là cơ quan chứng thực “khóa công khai”. Các nội dung về chứng thực khóa công khai sẽ được
đề cập tại phần tiếp theo.
3.2 Chứng thực khoá công khai
3.2.1 Khái niệm
Chứng thực khoá công khai hay còn gọi là chứng chỉ số là một tệp tin điện tử được sử dụng để nhận diện một cá nhân, một máy chủ, một công ty, hoặc một vài đối tượng khác và gắn chỉ danh của đối tượng đó với một khoá công khai (public key). Giống như bằng lái xe, hộ chiếu, chứng minh thư hay những giấy tờ nhận diện cá nhân thông thường khác, chứng chỉ số cung cấp bằng chứng cho sự nhận diện của một đối tượng.
Để lấy được bằng lái xe, bạn cần phải đăng ký với Phòng cảnh sát giao thông. Họ sẽ cấp cho bạn bằng lái xe sau khi đã xác định các thông tin về bạn như: có khả năng lái xe, họ và tên, địa chỉ, và những thông tin cần thiết khác.
Để lấy được chứng chỉ số bạn cũng cần phải thực hiện các công việc đăng ký tương tự như vậy. Nơi có thể chứng nhận những thông tin của bạn là chính xác được gọi là Nhà cấp chứng chỉ số.
Nhà cung cấp chứng thực số (CA - Certification Authority)
CA là một bên thứ ba đáng tin cậy xác thực các thực thể tham gia vào một giao dịch điện tử. Để xác thực một thực thể, CA phát hành một chứng chỉ số. Chứng chỉ số này là một tài liệu số thiết lập các thông tin của các đối tượng tham gia trong một giao dịch. Chứng chỉ số phát hành bởi CA, nó chứa thông tin về tên của người đăng ký, khoá bí mật và khoá công khai của người đăng ký, khoá công khai so CA cấp. Thông tin này phụ thuộc vào chính sách của công ty nơi phát hành chứng chỉ số (giấy chứng nhận).
Trước khi cấp một chứng chỉ số, CA xác minh theo yêu cầu cho một giấy chứng nhận với một cơ quan đăng ký (RA). Để xác nhận yêu cầu chứng chỉ, CA sử dụng các thủ tục riêng của nó.Các thủ tục này phụ thuộc vào một chính sách tổ chức và cơ sở hạ tầng có sẵn để xác nhận yêu cầu. Nếu yêu cầu xác nhận, CA phát hành giấy chứng nhận.
Chứng chỉ số
Điều quan trọng là đảm bảo an ninh cho khóa công khai để tránh trường hợp giả mạo và thay đổi khóa.Vì vậy, phải có một cơ chế toàn vẹn dữ liệu để đảm bảo rằng khóa công khai không được sưa đổi.Tuy nhiên, cơ chế toàn vẹn dữ liệu một mình không đủ để đảm bảo rằng chìa khóa công khai thuộc về chủ sở.Một giải pháp liên kết khóa công khai với tổ chức tin cậy, có thể đảm bảo nhận dạng và xác thực của khóa công khai. Giải pháp đó là chứng chỉ số. Giải pháp này thực hiện hai mục tiêu sau:
Thiết lập sự toàn vẹn của khoá công khai
Ràng buộc khoá công khai và các thông tin liên quan đến chủ sở hữu một cách tin cậy
Trong môi trường PKI, chứng chỉ số thực hiện được hai mục tiêu trên. Chứng chỉ số đảm bảo rằng chỉ có khoá công khai đại diện cho một giấy chứng nhận đã được xác thực bởi một cơ quan chứng nhận hoạt động với khóa bí mật của chủ thể. Điều này giúp loại bỏ nguy cơ mạo danh.
Chứng chỉ số gồm các thành phần sau:
Số giấy chứng nhận
Chữ ký của CA
Khóa công khai của người dùng do CA cấp
Ngày hết hạn
Tên của CA đã cấp chứng nhận
Sau khi có chứng chỉ số, các thực thể có thể sử dụng nó để giao tiếp với người nhận thông tin theo các bước sau:
1. Người gửi ký thông điệp với khóa riêng của mình để đảm bảo tính toàn vẹn thông điệp và tính xác thực và gửi tin nhắn tới người nhận.
2. Người nhận, sau khi nhận được thông báo, xác minh chữ ký bằng khoá công khai của người gửi và truy vấn cơ sở dữ liệu đích để kiểm tra tính hợp lệ của chứng chỉ số của người gửi.
3. Cở sở dữ liệu đích trả lại kết quả của người đăng ký chứng chỉ số tới người nhận. Giao dịch kết thúc khi giấy chứng nhận là hợp lệ.
CA ký giấy chứng nhận. Để xác minh một chữ ký, khoá công khai của các CA là cần thiết. Khóa công khai là một phần của chứng chỉ số của CA. Các chứng chỉ này thường được cài đặt sẵn trong các trình duyệt Web. Sau khi đã được cấp giấy chứng nhận, nó cần phải được phân phối cho người dùng và các tổ chức. Điều này được thực hiện bởi một hệ thống quản lý chứng chỉ (CDS) hoặc kho lưu trữ.
3.2.2 Các nhà cung cấp dịch vụ chữ ký số, chứng thực chữ ký số tại Việt Nam
Hiện nay ở Việt Nam có 5 nhà cung cấp dịch vụ chữ ký số (CKS), chứng thực chữ ký số:
+ Tập đoàn Bưu chính Viễn thông Việt Nam (VNPT): nhà cung cấp dịch vụ chứng thực CKS đầu tiền tại Việt Nam sau khi nhận Giấy phép cung cấp dịch vụ Chứng thực chữ ký số công cộng của Bộ TT&TT ngày 15/9/2009. Theo giấy phép này, VNPT được cung cấp dịch vụ chứng thực CKS cho cơ quan, tổ chức, cá nhân sử dụng trong các hoạt động công cộng. Các loại chứng thư số được VNPT cung cấp bao gồm: Chứng thư số cá nhân cho cơ quan, tổ chức, cá nhân; Chứng thư số SSL (chứng thư số danh cho website); Chứng thư số cho CodeSigning (chứng thư số dành cho ứng dụng). Trước khi được cấp giấy phép, VNPT đã ký thỏa thuận cung cấp dịch vụ chứng thực CKS công cộng cho ngành tài chính, đồng thời hợp tác hỗ trợ triển khai thành công Dự án thí điểm “Người nộp thuế nộp hồ sơ qua mạng internet” và áp dụng CKS vào các thủ tục hải quan điện tử trong giai đoạn 2009 - 2010. Tiếp đến VNPT sẽ tiếp tục cung cấp dịch vụ này cho các ngân hàng, doanh nghiệp thương mại điện tử, v.v…
+ Công ty cổ phẩn công nghệ thẻ NacencommSCT: chính thức là nhà cung cấp dịch vụ chứng thực CKS công khai thứ hai tại Việt Nam từ ngày 2/3/2010. NacencommSCT là công ty thành viên của công ty Điện tử Hà Nội (HANEL), hoạt động trong lĩnh vực công nghệ thẻ thông minh, phát triển các ứng dụng bảo mật và xác thực. Công ty NecencommSCT sẽ tổ chức cung cấp các dịch vụ xác thực chữ ký trong các giao dịch điện tử cho các doanh nghiệp, tổ chức, cá nhân.
+ Công ty An ninh mạng Bkav là nhà cung cấp dịch vụ chứng thực CKS công cộng