Ứng dụng chữ kí số để xác thực tính toàn vẹn của nội dung

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xây dựng giải pháp đảm bảo an toàn thông tin trong hệ thống tàng thư ADN của công an thành phố Hà Nội (Trang 35)

Chƣơng 2 : XÁC THỰC VÀ BẢO ĐẢM TOÀN VẸN DỮ LIỆU DỰA TRÊN CHỮ KÝ SỐ

2.3 Ứng dụng chữ kí số để xác thực tính toàn vẹn của nội dung

2.3.1 Xác thực tính toàn vẹn của nội dung thông tin.

Như chúng ta đã biết thông tin là những hiểu biết, tri thức của con người về một đối tượng, một thực thể trong thế giới quan. Thông tin có thể tồn tại dưới nhiều dạng khác nhau (chữ viết, âm thanh, hình ảnh).

Mh\ h(m) m MR m~ S s* = SA,k(m~) R MS SA, k M m h

Nội dung thông tin là tất cả những thông tin chứa trong nó đem lại cho con người sự hiểu biết, tri thức về đối tượng đó hay chính là giá trị của thông tin. Khi thông tin có sự thay đổi thì giá trị của nó thay đổi hay nội dung của nó thay đổi.

Việc đảm bảo tính toàn vẹn của nội dung thông tin trong lưu trữ và trao đổi thông tin điện tử ngày nay là rất quan trọng. Chỉ cần có một sự thay đổi không đáng kể cũng có thể làm cho thông tin bị sai lệch đi rất nhiều. Làm cho giá trị của thông tin đó bị mất đi hay thay đổi hoàn toàn.

Sự toàn vẹn của nội dung thông tin phải đảm bảo rằng thông tin đó là

chính xác hoặc phù hợp với trạng thái của thông tin mong muốn. Bất kì sự thay đổi không được phép thông tin nào dù là vô tình hay có ý đều xâm phạm đến tính toàn vẹn của thông tin.

Hiện nay tội phạm máy tính phát triển mạnh và ngày càng tinh vi hơn, việc thông tin bị đánh cắp, sửa đổi phá hủy xảy ra rất nhiều. Vấn đề này đang làm đau đầu các nhà quản lý, các nhà kinh tế, các nhà công nghệ thông tin để đảm bảo an toàn cho thông tin. Có một thực tế đặt ra là khi trao đổi mua bán thông tin, đòi hỏi phải xác định được thông tin đó của ai và thông tin có chính xác hay không. Việc đòi hỏi phải có một phương pháp xác định thông tin đó là có thật và của chính người cần trao đổi mua bán thông tin đó. Và chữ kí số, đã ra đời và đã được ứng dụng để xác thực tính toàn vẹn của nội dung thông tin. Nó là phương pháp bảo vệ hữu dụng nhất trong việc xác thực nội dung thông tin hiện nay. Và chữ kí số RSA đã đáp ứng được yêu cầu trên và nó được các nhà bảo mật an toàn thông tin hay dùng nhất.

2.3.2 Sơ đồ chữ kí RSA

Sơ đồ chữ kí RSA là một sơ đồ chữ kí dựa trên các thuật toán của hệ mã hoá khoá công khai RSA và thuật toán băm. Phần này chúng ta sẽ tìm hiểu về các thuật toán cũng như cách thức sử dụng các thuật toán đó trong sơ đồ chữ kí số RSA.

2.3.2.1 Giới thiệu về mã hoá khoá công khai

Ý tưởng về hệ thống mật mã với khoá công khai do Difie và Hellman đưa ra vào năm 1976 và được thực hiện lần đầu tiên vào năm 1977 bởi Rivest - Sharmir - Adleman (bộ ba tác giả của hệ mật mã RSA nổi tiếng). Tiếp sau nó có rất nhiều hệ thống khoá công khai được đề xuất như: Merkle- Hellman Knapsack (Hệ ba lô Merkle- Hellman), Chor-Rivest, ElGamal McEliece, Elliptic Curve.

Một điều cần lưu ý là hệ thống khoá công khai là không bao giờ cung cấp độ bảo mật tuyệt đối. Vấn đề giải mã trong hệ thống khoá công khai liên

quan đến một khái niệm trừu tượng về hàm cửa sập một chiều sẽ được đề cập đến dưới đây.

Những hàm mà khó có thể thực hiện được việc tính hàm ngược của nó được gọi là hàm một chiều (one-way function). Một hàm f được gọi là one-way function nếu :

1. Với mọi X tính ra Y=f(X) dễ dàng

2. Khi biết Y rất khó tính ra X sao cho Y= f(X)

Các hàm một chiều đóng vai trò trọng yếu trong mật mã học. Chúng rất quan trọng trong việc xây dựng các hệ mật mã khoá công khai. Mặc dù cho đến nay có rất nhiều hàm được gọi là một chiều, nhưng hiện nay người ta vẫn chưa chứng minh được tồn tại một hàm một chiều theo đúng nghĩa của nó.

Ta lấy ví dụ về hàm được coi là một chiều như sau: Giả sử n là tích của hai số nguyên tố lớn p và q, giả sử b là một số nguyên dương. Khi đó ta xác định ánh xạ f: Zn->Zn như sau:

f(x) = xb mod n

(Với b và n được chọn thích hợp thì đây chính là hàm mã RSA).

Để xây dựng được một hệ mật mã khoá công khai thì việc tìm được một hàm một chiều vẫn chưa đủ. Giả sử một người A gửi một thông điệp được mã hoá bằng hàm mã hoá một chiều f(x) đến cho B. Muốn giải mã thông điệp này, B nhất thiết phải có một cửa sập chứa các thông tin có thể cho phép tính hàm nghịch đảo của hàm mã hoá f(x). Có như vậy B mới có thể giải mã được. Một hàm như vậy được gọi là hàm cửa sập một chiều.

Một hàm được gọi là hàm cửa sập một chiều nếu nó là một hàm một chiều nhưng có thể tính được hàm nghịch đảo với các thông tin từ một cửa sập nhất định.

Trong thực tế, nếu một vấn đề phải giải quyết vượt quá khả năng con người, hoặc giải quyết được nhưng mất quá nhiều thời gian, thì vấn đề này được xem là bí mật. Như vậy, những hàm một chiều mà việc tính hàm ngược của nó quá khó thì coi như đảm bảo yêu cầu về bảo mật .

2.3.2.2 Mã hoá khoá công khai RSA

Hệ mã hoá khoá công khai RSA được xây dựng dựa trên việc tính tích của hai số nguyên tố p, q thì dễ nhưng phân tích một số thành tích của hai số nguyên lớn thì vô cùng khó. Điều này cho phép xây dựng một hàm cửa sập một chiều làm cơ sở cho hệ mã hoá công khai RSA.

a.Thuật toán tạo khoá của hệ mã hoá khoá công khai RSA

Giả sử A và B là hai người cần trao đổi thông tin cho nhau và để đảm bảo an toàn, họ sử dụng hệ mã hoá khoá công khai RSA. Để tạo các khoá mã

RSA cho mình, A sẽ phải thực hiện các bước như sau:

1. Tạo ra hai số nguyên tố lớn p và q có cùng kích thước 2. Tính n=pq và (n)=(p-1)(q-1)

3.Chọn ngẫu nhiên một số e, 1< e < (n) thoả mãn USCLN(e,(n))=1. Người ta thường chọn e là một trong các giá trị 3, 17 và 216

+1, tức 65537 ( mỗi số này chỉ có 2 chữ số 1 trong dạng biểu diễn nhị phân, giúp tăng tốc độ tính số mũ trong thực tế)

4. Sử dụng thuật toán Euclidean mở rộng để tính d = e-1 mod ((n))

5. A công bố (n,e) trong danh bạ như là khoá công khai. Cặp (n,d) được A giữ làm khoá bí mật.

b.Thuật toán mã hoá và giải mã bằng RSA

- Mã hoá:

Để mã hoá một thông điệp m cần gửi cho A, B sử dụng khoá công khai của A là (n; e) và xác định thông điệp mã hoá bằng cách tính :

c = me mod n

sau đó gửi bản mã c của thông điệp cần gửi cho A.

- Giải mã:

Sau khi nhận được bản mã c, A sử dụng cặp khoá bị mật (n,d) để khôi phục lại thông điệp m như sau:

m = cd mod n.

Có thể chứng minh được phép mã hoá và giải mã trên là các thao tác nghịch đảo của nhau như sau:

Vì: de 1 (mod (n)) ta có : de=t(n)+1 (t là một số nguyên). Giả sử xZn* , khi đó ta có: (xe)d  xt*(n)+1 (mod n)  (x(n))tx (mod n)  1t *x (mod n)  x (mod n) Chứng minh tương tự ta có (xe )d  x(mod n) với xZn. c.Độ an toàn của hệ mã hoá khoá công khai RSA

Như đã trình bày ở phần trên, độ an toàn của hệ mã hoá công khai RSA dựa trên cơ sở những khó khăn của việc xác định các thừa số nguyên tố của một số lớn.

Trong hệ mã hoá công khai RSA thì khoá giải mã (private key) là cặp (n,d) và các thừa số p, q là được giữ bí mật. Sự thành công của phương pháp là tuỳ thuộc vào kẻ địch có khả năng tìm ra được giá trị của private key hay không nếu biết cặp khoá công khai (n,e).

tích n ra thành thừa số để tính p và q. Nhưng việc phân tích ra thừa số là một việc làm tốn rất nhiều thời gian.

d. Ứng dụng của hệ mã khóa công khai RSA

Hệ mã khóa công khai RSA được sử dụng rộng rãi và là một chuẩn khá phổ biến cho các phương tiện liên lạc an toàn trên thế giới. RSA được sử dụng với tư cách là một chuẩn trong những chuẩn mật mã khóa công khai PKCS (Public-Key Cryptography Standards) được sử dụng trong các phần mềm để mã hóa kí tự ASCII và chuỗi nhị phân. Nó cũng được sử dụng trong S/MIME, chuẩn Secure/MIME để gửi và nhận các email.

Cơ quan Hàng không và vũ trụ Hoa Kỳ sử dụng cơ sở hạ tầng khóa công khai (Public Key Infrastructure-PKI) gọi là Entrust© trong đó có sử dụng thuật toán RSA. Luật pháp quốc gia Canada đã yêu cầu bất kỳ hệ mã hóa nào trong thực tế cũng phải sử dụng kiến trúc tương tự PKI. Các chuẩn trong giao dịch của ngân hàng quốc gia ở các nước Pháp, Mỹ, Australia đều sử dụng RSA như một phương tiện mã hóa.

Ngoài ra vì RSA có khả năng hỗ trợ xác thực dữ liệu cùng với đảm bảo an toàn dữ liệu nên RSA nhanh chóng trở thành chuẩn cho các chữ kí điện tử để cung cấp kỹ thuật kí điện tử cho các di chúc, các hợp đồng thuê bất động sản, kí séc, hộ chiếu hoặc các tài liệu của chính phủ.

2.3.2.3 Hàm băm SHA-1(function hash SHA-1)a. Hàm băm và chữ kí a. Hàm băm và chữ kí

Đối với các sơ đồ chữ kí thông thường, ta chỉ có thể kí các bức điện nhỏ. Chẳng hạn khi dùng chuẩn cho chữ kí số DSS, một tài liệu dài 160 bít sẽ được kí bằng chữ kí dài 320 bít. Trên thực tế ta cần kí các tài liệu dài hơn nhiều (chẳng hạn, một tài liệu về pháp luật có thể dài nhiều Megabyte).

Một cách đơn giản để giải bài toán này là chặt bức điện dài thành nhiều đoạn 160 bít, sau đó kí lên các đoạn đó độc lập nhau. Điều này cũng tương tự như mã một chuỗi kí tự rõ bằng cách mã mỗi kí tự của chuỗi rõ một cách độc lập nhau bằng cùng một khoá. (Ví dụ : Chế độ ECB trong DES)

Với biện pháp này, có một số vấn đề cần phải giải quyết trong việc tạo ra các chữ kí điện tử . Trước hết, với một tài liệu dài, ta sẽ có một chữ kí rất lớn (dài gấp đôi bức điện gốc trong trường hợp DSS). Một nhược điểm khác là các sơ đồ chữ kí “an toàn” nhất thường chậm vì chúng dùng nhiều phép tính số học phức tạp. Tuy nhiên, vấn đề quan trọng hơn đối với biện pháp này là tài liệu đã kí có thể bị sắp xếp lại các đoạn theo cách khác nhau, hoặc một số đoạn trong chúng có thể bị loại bỏ nhưng bức tài liệu được vẫn được xác nhận. Để bảo vệ sự nguyên vẹn của toàn bộ tài liệu thì không thể thực hiện cách kí độc lập trên

từng mẩu nhỏ của chúng.

Giải pháp để giải quyết các vấn đề này là dùng hàm Hash mã khoá công khai nhanh. Hàm này dựa trên nội dung một tài liệu có độ dài tuỳ ý để tạo ra một “bản tóm tắt” của tài liệu với kích thước qui định (160 bít nếu dùng DSS). Sau đó, “bản tóm tắt” của tài liệu này (dữ liệu ra của hàm Hash) sẽ được kí. Việc dùng hàm Hash với DSS được biểu diễn như sau:

Khi B muốn kí bức điện x, trước tiên, B tạo một bản tóm tắt z của tài liệu bằng cách sử dụng hàm băm h (z = h(m)) và sau đó dùng khoá bí mật của mình để tìm chữ kí s (s = SigK(z) trong đó sigK là hàm mã hoá RSA với khoá bí mật của B). Tiếp theo, B gửi cặp (m,s) đến cho A. Để xác thực, trước hết, A phải khôi phục bản tóm tắt của tài liệu bằng hàm h (z = h(m)) và sau đó thực hiện phép kiểm tra xem VerK(m,s) có bằng true không

b. Vai trò của hàm băm

Một hàm băm sẽ đưa một tập hợp các bản thông báo vào một bản tóm tắt (digest) có độ dài cố định. Các bản tắt này có thể được sử dụng để tạo ra chữ kí điện tử có độ dài cố định không phụ thuộc vào độ dài của tài liệu.

Các hàm băm một chiều là các kiến thiết mật mã được sử dụng trong nhiều ứng dụng. Chúng được sử dụng cùng với các thuật toán kháo công khai cho cả mã hóa và chữ kí số. Chúng được sử dụng trong kiểm tra tính toàn vẹn, trong xác thực. Chúng có nhiều kiểu loại ứng dụng trong rất nhiều giao thức khác nhau.

Vào năm 1990, Ron Rivest đã sáng tạo ra hàm băm MD4. Vào năm 1992, ông đã cải tiến MD4 và phát triển một hàm băm khác: MD5. Đến năm 1993, NSA đã công bố một hàm băm rất giống với MD5, nó được gọi là SHA. Sau đó, năm 1995, khi trích dẫn điểm yếu mới được phát hiện, NSA đã có những cải tiến đối với SHA. Thuật toán mới được gọi là SHA-1. Ngày nay, hàm băm thông dụng nhất là SHA-1, cùng với MD5 hãy còn được sử dụng trong các ứng dụng cũ.

Các hàm băm một chiều được giả thiết có 2 tính chất. Thứ nhất, chúng là hàm một chiều. Điều này có nghĩa là dễ lấy một văn bản và tính giá trị băm, nhưng khó có thể lấy giá trị băm rồi tạo lại văn bản ban đầu. Thứ hai, chúng là

Bức điện: m độ dài tuỳ ý.

Tính bản tóm lược thông báo: z = h (m) 160 bít 

không va chạm. Điều đó có nghĩa là không tìm được 2 văn bản khác nhau mà khi băm cho cùng một giá trị.

Hàm băm rất hay được sử dụng trong các sơ đồ chữ kí điện tử vì các lí do:

Thứ nhất: Thuật toán kí công khai có khuynh hướng rất chậm, do đó việc lấy giá trị băm của một bản thông điệp lớn rồi sau đó mới thực hiện việc kí trên kết quả đó (thường là nhỏ hơn trước khi băm) sẽ có hiệu quả hơn rất nhiều so với khi ta kí ngay trên bản thông điệp lớn.

Thứ hai: Nếu như bạn muốn đưa nhiều chữ kí vào một tài liệu nào đó mà không sử dụng hàm băm, thì bản thông điệp được kí đó sẽ lớn hơn rất nhiều lần bản thông điệp ban đầu. Nếu bạn thực hiện lại điều đó nhưng sử dụng hàm băm thì bạn chỉ phải đưa thêm vào tài liệu một chữ kí khá nhỏ. Việc yêu cầu một hàm băm không va chạm là để khi có bất kì một thay đổi nào cũng có thể phát hiện ra được. c. Nhóm hàm băm SHA [12] Thuật toán Năm xuất hiện Kết quả (bit) Trạng thái (bit) Khối (bit) Thông điệp tối đa (bit) Word (bit) Chu kỳ Đụng độ SHA-0 1993 160 160 512 264 − 1 32 80 Có SHA-1 1994 160 160 512 264 − 1 32 80 2 63 thao tác SHA- 256/224 2002/ 2004 256/ 224 256 512 2 64 − 1 32 64 Chưa SHA- 512/384 2002 512/ 384 512 1024 2 128 − 1 64 80 Chưa

d. Thuật toán băm SHA-1 [9]

0 0 1 0 0 1 0 1

Bản tài liệu với độ dài tuỳ ý

Hàm băm

H(m)

0 1 1 0 0 1 1 0 1 0 0

Bản digest của tài liệu có độ dài cố định

Thuật toán băm SHA-1 (Secure Hash Algorithm 1) được thiết kết bởi NSA và NIST. Cũng giống như MD5, nó được cải tiến từ MD4 nhưng cải tiến theo một cách khác. Nó cung cấp hàm băm 160 bit. Xét về bảo mật thì nó mạnh hơn gấp hai lần MD5 vì giá trị băm dài hơn.

Khi một tài liệu có độ dài nhỏ hơn 264

bit làm giá trị đầu vào, SHA-1 sẽ tạo ra một giá trị băm có độ dài 160 bit làm giá trị đầu ra. Giá trị băm này có thể được dùng làm đầu vào của một thuật toán kí hoặc dùng để xác thực chữ kí cho tài liệu đó.

Mô tả hàm băm SHA-1:

Giả sử có một tài liệu có độ dài m bit là dữ liệu vào. Vấn đề đặt ra là phải tìm ra được tóm tắt của tài liệu đó. Ở đây m là một số nguyên không âm bất kì; m có thể bằng 0, không cần phải là ước của 8, và nó có thể là một số lớn bất kì.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xây dựng giải pháp đảm bảo an toàn thông tin trong hệ thống tàng thư ADN của công an thành phố Hà Nội (Trang 35)