Phần B: CƠ SỞ LÝ THUYẾT Trình bày một cách có hệ thống các lý thuyết về cơ sở toán học mật mã áp dụng trong việc mã hóa và bảo mật thông tin, những khái niệm cơ bản về mã hóa, mật mã có
Trang 1KHOA KỸ THUẬT – CÔNG NGHỆ – MÔI TRƯỜNG
Trang 2KHOA KỸ THUẬT – CÔNG NGHỆ – MÔI TRƯỜNG
NGUYỄN HOÀNG TÙNG
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC NGÀNH CỬ NHÂN TIN HỌC
ỨNG DỤNG CHỮ KÝ SỐ TRONG THƯƠNG MẠI ĐIỆN TỬ
Giảng viên hướng dẫn:
ThS NGUYỄN QUANG HUY
An Giang, 5/2009
Trang 3LỜI CẢM ƠN
Trước tiên tôi xin được bày tỏ lòng tri ân đến quý thầy cô Trường đại học An Giang đã tận tình truyền đạt những kiến thức quý báu, dìu dắt, giúp đỡ tôi hoàn thành tốt nhiệm vụ của khoá học, hoàn thành khóa luận tốt nghiệp
Đặc biệt tôi xin chân thành cảm ơn thầy Nguyễn Quang Huy đã tận tình hướng dẫn và cho tôi những ý kiến đóng góp quý báu về các kiến thức chuyên ngành giúp tôi hoàn thành khóa luận này
Tôi cũng xin chân thành cảm ơn đến gia đình, những người thân và bạn bè đã động viên, khích lệ, tạo mọi điều kiện cho tôi trong suốt thời gian học tập tại trường giúp tôi hoàn thành khóa luận.
An Giang, ngày 08 tháng 05 năm 2009
Sinh viên thực hiện
Trang 4PHẦN TÓM TẮT
Khóa luận được trình bày theo hình thức từ trên xuống Bắt đầu của mỗi phần đều đưa ra những khái niệm cơ bản và quy định cho phần trình bày tiếp theo nhằm mục đích giúp dễ dàng trong khi đọc, dần dần đi sâu vào chi tiết để thảo luận rõ hơn những vấn đề liên quan, bao gồm cơ sở lý thuyết, việc bảo vệ an toàn dữ liệu dùng mật mã, trong đó trình bày rõ về hệ mật mã có khoá công khai RSA, chữ ký số
Phần A: TỔNG QUAN VỀ ĐỀ TÀI
Trình bày một số tình hình thực tế hiện nay trong việc bảo vệ an toàn dữ liệu, các phương pháp bảo vệ dữ liệu, tình hình sử dụng chữ ký số và chứng thực điện tử tại Việt Nam, các giải pháp hiện có từ đó đưa ra một số ý kiến về vấn đề bảo mật an toàn dữ liệu làm rõ lý
do chọn đề tài nghiên cứu của tác giả
Phần B: CƠ SỞ LÝ THUYẾT
Trình bày một cách có hệ thống các lý thuyết về cơ sở toán học mật mã áp dụng trong việc mã hóa và bảo mật thông tin, những khái niệm cơ bản về mã hóa, mật mã có khóa công khai, hệ mã RSA, quản lý và phân phối khóa, hàm băm mật mã SHA-1, chữ ký số sử dụng mật mã có khóa công khai, sơ đồ chữ ký số và chuẩn chữ ký số DSS
Giới thiệu và trình bày một cách khái quát về giao thức bảo mật Secure Socket Layer (SSL) trong việc chứng thực điện tử qua mạng, cách làm việc của SSL
Phần C: CÀI ĐẶT MỘT SỐ ỨNG DỤNG
Trình bày một số giao diện và các chức năng chính của hai phần mềm ứng dụng: phần mềm mã hóa và ứng dụng chữ ký số RSA, trang web bán hàng trực tuyến hỗ trợ giao thức bảo mật SSL
Phần F: TÀI LIỆU THAM KHẢO
Trình bày theo thứ tự các tài liệu tham khảo về mã hóa thông tin, chứng thực điện tử, chữ ký số,… của các tác giả trong và ngoài nước
Trang 5MỤC LỤC
Phần A: TỔNG QUAN VỀ ĐỀ TÀI 1
I Lý do chọn đề tài: 1
II Mục tiêu của đề tài: 2
III Giải pháp hiện có: 2
1 Cơ sở pháp lý: 2
2 Việc ứng dụng chữ ký số tại Việt Nam: 2
IV Nội dung thực hiện: 3
Phần B: CƠ SỞ LÝ THUYẾT 4
I Cơ sở toán học: 4
1 Phép tính đồng dư và các vấn đề liên quan: 4
1.1 Số nguyên tố và các định lý cơ bản của Số học: 4
1.2 Thuật toán Euclide và mở rộng: 4
1.3 Phi hàm Euler: 5
1.4 Phép tính đồng dư và phương trình đồng dư: 6
1.5 Định lý Fermat và các mở rộng: 7
1.6 Tính toán đồng dư của lũy thừa bậc lớn: 8
2 Hàm một chiều và hàm một chiều có “cửa sập”: 8
II Những khái niệm cơ bản về mã hóa: 9
1 Một số thuật ngữ: 9
2 Vì sao cần mã hóa? 10
3 Mã đối xứng và mã phi đối xứng: 11
III Mật mã có khóa công khai: 12
1 Giới thiệu về mật mã có khóa công khai: 12
2 Nguyên tắc chung của mã hóa với khóa công khai: 13
3 Hệ mã RSA: 13
3.1 Thuật toán: 14
3.2 Độ an toàn của RSA: 15
3.3 Các ứng dụng quan trọng: 16
3.4 Quản lý khóa: 17
IV Hàm băm mật mã: 24
1 Giới thiệu sơ lược về hàm băm mật mã: 24
2 Phân loại các hàm băm mật mã: 24
3 Các khái niệm và định nghĩa: 25
Trang 63.1 Định nghĩa tổng quát của hàm băm: 25
3.2 Một số tính chất cơ bản của hàm băm mật mã: 25
3.3 Định nghĩa các hàm băm: 25
4 Cấu trúc cơ bản của các thuật toán băm: 26
5 Hàm băm SHA-1: 26
5.1 Hàm băm MD4: 26
5.2 Hàm băm SHA-1: 28
V Chữ ký số sử dụng mật mã khóa công khai: 30
1 Chữ ký số là gì? 30
2 Phương pháp ký điện tử và xác nhận chủ thể: 30
2.1 Ký điện tử trong hệ thống an toàn với mã khóa công khai: 31
2.2 Ký văn bản có đóng dấu thời gian: 31
2.3 Ký với mã khóa công khai và hàm băm một chiều: 32
2.4 Ký điện tử và mã hóa thông tin: 32
3 Sơ đồ chữ ký số: 33
3.1 Định nghĩa: 33
3.2 Phân loại sơ đồ chữ ký số: 34
4 Sơ đồ chữ ký RSA: 36
4.1 Thuật toán sinh khóa: 36
4.2 Thuật toán sinh và xác minh chữ ký: 36
5 Chuẩn chữ ký số DSS (Digital Signature Standard): 37
5.1 Giải thuật sinh khóa: 37
5.2 Giải thuật sinh chữ ký: 37
5.3 Giải thuật xác nhận chữ ký: 38
6 Ứng dụng của chữ ký số: 38
VI Secure Socket Layer: 38
1 Secure Socket Layer (SSL) là gì? 38
2 Giao thức SSL làm việc như thế nào? 39
Phần C: CÀI ĐẶT MỘT SỐ ỨNG DỤNG 42
I Chương trình mã hóa và ứng dụng chữ ký số RSA: 42
1 Giao diện chính của chương trình: 42
2 Giao diện một số form chức năng chính: 44
II Trang web bán hàng trực tuyến hỗ trợ giao thức SSL: 51
1 Giao diện chính: 51
2 Giao diện một số chức năng: 52
Phần D: TỔNG KẾT VÀ HƯỚNG PHÁT TRIỂN 57
Trang 7I Kết quả đạt được: 57
II Hạn chế: 57
III Hướng phát triển: 57
Phần E: PHỤ LỤC 58
I Cài đặt SSL cho web server: 58
1 Cài đặt XAMPP Server: 58
2 Tạo chứng chỉ SSL (SSL certificate) và server private key: 62
II Các văn bản kèm theo: 64
1 Luật giao dịch điện tử: 64
2 Nghị định số 27/2007/NĐ-CP về giao dịch điện tử trong hoạt động tài chính: 70
Phần F: TÀI LIỆU THAM KHẢO 73
Trang 8DANH MỤC HÌNH ẢNH
Hình 01: Các ký hiệu của phép mã hóa và phép giải mã 10
Hình 02: Sơ đồ khối nguyên lý hoạt động của mật mã khoá công khai 13
Hình 03: Phân phối khoá công khai không kiểm soát 17
Hình 04: Công bố khóa công khai vào thư mục khóa 18
Hình 05: Lược đồ phân phối khoá công khai 19
Hình 06: Chứng chỉ khoá công khai đơn giản 21
Hình 07: Một đoạn mẫu của chứng chỉ X.509 22
Hình 08: Sử dụng mã hóa khóa công khai để thiết lập một khóa phiên 23
Hình 09: Sử dụng mã hoá khoá công khai để trao đổi khoá bí mật 24
Hình 10: Mã hóa công khai: Cung cấp xác thực và chữ ký 31
Hình 11: Chữ ký số với khóa công khai và hàm băm một chiều 32
Hình 12: Mã hóa công khai: Cung cấp xác thực, bí mật và chữ ký 33
Hình 13: Phân lớp các sơ đồ chữ ký số 34
Hình 14: Tiến trình ký thông điệp 35
Hình 15: Tiến trình xác minh chữ ký 35
Hình 16: Sơ đồ chữ ký khôi phục thông điệp 36
Hình 17: Sơ đồ chuẩn chữ ký số DSS 37
Hình 18: Các giao thức con của SSL trong mô hình TCP/IP 39
Hình 19: Từng bước thành lập một kết nối SSL 40
Hình 21: Giao diện chính chương trình mã hóa và ứng dụng chữ ký số RSA 42
Hình 22: Giao diện phần soạn thảo văn bản 42
Hình 23: Giao diện phần mã hóa văn bản 42
Hình 24: Giao diện phần chữ ký số 43
Hình 25: Giao diện phần hiển thị 43
Hình 26: Giao diện menu docksite 43
Hình 27: Giao diện phần giúp đỡ 44
Hình 28: Form tạo cặp khóa 44
Hình 29: Form demo giải thuật RSA 44
Hình 30: Form mã hóa văn bản 45
Hình 31: Form giải mã văn bản 46
Hình 32: Form mã hóa và giải mã file 46
Hình 33: Form tạo mã băm (SHA-1) cho văn bản 47
Hình 34: Form tạo mã băm (SHA-1) cho file 47
Trang 9Hình 35: Form ký văn bản 48
Hình 36: Form chứng thực chữ ký của văn bản (chấp nhận chữ ký) 49
Hình 37: Form chứng thực chữ ký của văn bản (từ chối chữ ký) 50
Hình 38: Giao diện chính trang web bán hàng 51
Hình 39: Trang giỏ hàng 52
Hình 40: Trang sản phẩm trong danh mục 53
Hình 41: Trang thông tin sản phẩm 54
Hình 42: Giao diện chính trang quản trị 55
Hình 43: Giao diện quản trị danh mục sản phẩm 56
Trang 10DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT
Các từ viết tắt:
AES Advanced Encryption Standard Chuẩn mã hóa nâng cao
CA Certificate Authority Nhà cung cấp chứng thực số
DES Data Encryption Standard Chuẩn mã hóa dữ liệu
DSS Digital Signature Standard Chuẩn chữ ký số
IDEA International Data Encryption Algorithm Thuật toán mã hóa dữ liệu quốc tế IIS Internet Information Server Dịch vụ server của Microsoft
MD4 Message Digest 4 Thuật toán tạo dấu vết thông điệp MIT Massachusets Institute of Technology Học viện công nghệ Massachusets NAT Network Address Translation Hệ thống phân giải địa chỉ IP
NIST National Institute for Standards and Technology Viện Tiêu chuẩn và Công nghệ Hoa Kỳ
PKI Public Key Infrastructure Cơ sở hạ tầng khoá công khai
SHA Secure Hash Algorithm Thuật toán băm phát triển của MD4
SSL Secure Socket Layer Giao thức bảo mật HTTPS
TLS Transport Layer Security Tương tự như SSL
sig Signature Thuật toán ký
ver Verify Thuật toán xác minh chữ ký
Từ khóa:
Message digest, hash code, mã hóa, giải mã, khoá bí mật, khoá công khai, khóa riêng, biến dây chuyền, dấu vết thông điệp, đặc trưng văn bản, mã băm, chữ ký số, thuật toán sinh chữ ký số, thuật toán chứng thực chữ ký số, chữ ký số kèm theo thông điệp, chữ ký số khôi phục thông điệp, nhà cung cấp chứng thực số, lược đồ chữ ký số,…
Trang 11Phần A: TỔNG QUAN VỀ ĐỀ TÀI
I Lý do chọn đề tài:
Hiện nay, ở tất cả các nước phát triển cũng như đang phát triển, mạng máy tính đang ngày
càng đóng vai trò thiết yếu trong mọi lĩnh vực hoạt động của toàn xã hội, và một khi nó trở
thành phương tiện điều hành các hệ thống thì nhu cầu bảo mật thông tin được đặt lên hàng
đầu Nhu cầu này không chỉ có ở các bộ máy an ninh, quốc phòng, quản lý nhà nước,… mà đã trở thành bức thiết trong nhiều hoạt động kinh tế xã hội: tài chính, ngân hàng, thương mại điện tử,… và thậm chí trong cả một số hoạt động thường ngày của người dân (thư điện tử, thanh toán, tín dụng,…)
Vấn đề bảo mật đang được nhiều người tập trung nghiên cứu và tìm mọi giải pháp để đảm bảo an toàn, an ninh cho hệ thống phần mềm, đặc biệt là các hệ thống thông tin trên mạng Việc bảo mật cho hệ thống có thể thực hiện theo nhiều phương diện, ở nhiều tầng khác nhau, bao gồm từ phương diện kiểm soát truy nhập vật lý vào hệ thống; thực hiện sửa chữa, cập nhật, nâng cấp hệ điều hành cũng như vá mọi lỗ hổng về an ninh tìm thấy; quản lý các hoạt động trao đổi thông tin trên mạng (giám sát qua bức tường lửa, các bộ định vị router, phát hiện và phòng ngừa sự xâm nhập, v.v…); xây dựng các giải pháp bảo mật ở mỗi phần mềm đến quản lý người dùng thông qua việc cấp quyền sử dụng, mật khẩu, sử dụng mật mã, mã
hoá dữ liệu để che giấu thông tin Nếu không có sự bảo vệ phụ trợ, như mã hóa dữ liệu thì
môi trường mạng không phải là nơi an toàn để có thể trao đổi dữ liệu thông tin mật
Về triết lý, dưới một góc độ nào đó, thông tin dữ liệu được xem là an toàn nếu như khi đối phương khai thác được thì thông tin đó đã mất hiệu lực sử dụng hoặc khi phía gửi tin thừa nhận là an toàn và phía nhận tin không có nghi vấn gì Trong các mạng truyền tin lớn, như Internet chẳng hạn (nhiều người sử dụng, nhiều thành phần bao gồm các phần cứng, phần mềm khác nhau tham gia vào mạng, ) thì việc khẳng định được độ tin cậy là một việc làm hết sức khó khăn và tốn kém Hiện nay, việc sử dụng mạng truyền thông để trao đổi thông tin
dữ liệu đang trở thành xu thế Do đó cần có các yêu cầu về bảo mật truyền thông Đó là bốn yêu cầu sau:
Độ tin cậy: Cung cấp sự bí mật cho các thông báo và dữ liệu được lưu bằng việc che
dấu thông tin sử dụng các kỹ thuật mã hóa
Tính toàn vẹn: Cung cấp sự bảo đảm với tất cả các bên rằng thông báo và dữ liệu
không bị thay đổi từ khi tạo ra cho đến khi người nhận mở nó
Tính không từ chối: Có thể cung cấp một cách xác nhận rằng tài liệu là do người nào
gởi đi ngay cả khi họ cố gắng từ chối nó
Tính xác thực: Cung cấp 2 dịch vụ: Đầu tiên là nhận dạng nguồn gốc của một thông báo và cung cấp một vài sự bảo đảm rằng nó là đúng sự thực Thứ hai là kiểm tra đặc tính của
người đang logon một hệ thống và sau đó tiếp tục kiểm tra đặc tính của họ trong trường hợp ai
đó đang cố gắng đột nhiên kết nối và giả dạng là người sử dụng
Với công nghệ mật mã trước đây chỉ có thể cho phép ta thực hiện được hai yêu cầu đầu tiên Ngày nay với sự phát triển của công nghệ này thì hai yêu cầu sau có thể thực hiện được
bằng chữ ký số và chứng thực chữ ký số thông qua mật mã có khoá công khai
Ứng dụng mã hóa và bảo mật thông tin trong các hệ thống thương mại điện tử, giao dịch chứng khoán,… đã trở nên phổ biến trên thế giới và sẽ ngày càng trở nên quen thuộc với người dân Việt Nam Tháng 7/2000, thị trường chứng khoán lần đầu tiên được hình thành tại Việt Nam; các thẻ tín dụng bắt đầu được sử dụng, các ứng dụng hệ thống thương mại điện tử
Trang 12đang ở bước đầu được quan tâm và xây dựng Do đó, nhu cầu về các ứng dụng mã hóa và bảo mật thông tin trở nên rất cần thiết
Chính vì những vấn đề thực tiễn trên, khóa luận với đề tài: “Ứng dụng Chữ ký số trong
Thương mại điện tử” sẽ tập trung nghiên cứu một trong những phương pháp bảo vệ an toàn
dữ liệu có tính an toàn cao nhất hiện nay là hệ mật mã có khoá công khai RSA, chữ ký số, các lược đồ chữ ký số, chứng thực chữ ký số, công nghệ bảo mật sử dụng cho thương mại điện tử…
II Mục tiêu của đề tài:
Khóa luận sẽ tập trung tìm hiểu cơ sở toán học của lý thuyết mật mã, thuật toán và độ phức tạp của hệ mật mã có khoá công khai RSA, hàm băm mật mã, các vấn đề về chứng thực thông qua sơ đồ chữ ký RSA Ngoài ra khóa luận này cũng trình bày và xây dựng một ứng dụng trong việc chứng thực chữ ký số, và ứng dụng chữ ký số trong thương mại điện tử – cụ thể là công nghệ bảo mật SSL trong việc chứng thực thông tin qua mạng
III Giải pháp hiện có:
1 Cơ sở pháp lý:
Ngày 23/02/2007, Chính phủ đã ban hành Nghị định 27/2007/NĐ-CP về giao dịch điện
tử trong hoạt động tài chính (nội dung tóm tắt Nghị định này được trình bày trong phần phụ lục) Theo đó, cơ quan tài chính và tổ chức, cá nhân có tham gia giao dịch điện tử trong hoạt
động tài chính với cơ quan tài chính phải sử dụng chữ ký số
Trước đó, Chính phủ đã ban hành Nghị định 26/2007/NĐ-CP (ngày 15/02/2007) quy
định chi tiết thi hành Luật Giao dịch điện tử về chữ ký số và dịch vụ chứng thực chữ ký
số Theo đó, trong trường hợp pháp luật quy định văn bản cần có chữ ký thì yêu cầu đối với
một thông điệp dữ liệu được xem là đáp ứng nếu thông điệp dữ liệu đó được ký bằng chữ ký
số
Trong trường hợp pháp luật quy định văn bản cần được đóng dấu của cơ quan, tổ chức thì yêu cầu đó đối với một thông điệp dữ liệu được xem là đáp ứng nếu thông điệp dữ liệu đó được ký bởi chữ ký số của người có thẩm quyền theo quy định của pháp luật về quản lý và sử dụng con dấu và chữ ký số đó được bảo đảm an toàn theo quy định
2 Việc ứng dụng chữ ký số tại Việt Nam:
Ở Việt Nam, một số đơn vị trong ngành kho bạc, ngân hàng, thương mại đã ứng dụng thử nghiệm chữ ký số trong các giao dịch nội bộ (số lượng không nhiều) Trên thực tế, Việt
Nam vẫn đang trong giai đoạn xây dựng hành lang pháp lý và mô hình tổ chức để triển khai
chính thức công cộng
Khái niệm “chứng thực số” và “chữ ký số” còn tương đối mới đối với người sử dụng tại
Việt Nam Để hiểu được vai trò của nó trong giao dịch điện tử, người dùng đòi hỏi phải có một kiến thức nhất định về công nghệ thông tin và mã hóa (mã hóa bất đối xứng, public key, private key,…) Vì vậy một phần khách hàng vẫn chưa hưởng ứng dịch vụ này vì “không tin” vào chứng thực số và chữ ký số
Những tiện dụng đem lại từ việc triển khai chữ ký số, chứng thực số đã được thừa nhận
ở nhiều nước trên thế giới Còn tại nước ta, cái "khó" trong việc thực hiện chữ ký số, chứng thực số đang "bó" luôn thương mại điện tử, chính phủ điện tử
Vấn đề mấu chốt hiện nằm ở chỗ: Chữ ký “tươi” và con dấu trên văn bản đã được công nhận giá trị pháp lý từ lâu trong các văn bản pháp luật, nhưng chữ ký số và chứng thực số thì chưa hề có Khi chưa có căn cứ pháp lý rõ ràng và đảm bảo, sẽ không ai dám mạo hiểm
"quẳng" tiền của mình qua Internet
Trang 13Đến nay, còn có ý kiến tranh luận về việc có nên để doanh nghiệp, nhà đầu tư nước ngoài trở thành nhà cung cấp chứng thực số (Certificate Authority - CA) hay chỉ để nhà nước làm việc này Từ năm 2003 cho đến nay, Công ty Phần mềm và Truyền thông VASC là nhà cung cấp chứng thực số duy nhất tại Việt Nam
VASC đã ra đời từ 9 năm nay (được thành lập theo quyết định số 257/2000/QĐ-TCCB ngày 20/03/2000 của Tổng cục Bưu điện với tên gọi ban đầu là Công ty Phát triển Phần mềm VASC Ngày 29/08/2003, công ty được đổi tên thành Công ty Phần mềm và Truyền thông VASC VASC có trụ sở chính tại 33 Thái Hà, Hà Nội VASC là doanh nghiệp thành viên hạch toán phụ thuộc Tập đoàn Bưu chính Viễn thông Việt Nam, hoạt động theo Luật doanh nghiệp Nhà nước) nhưng khách hàng lớn nhất đến thời điểm hiện tại vẫn là ACB Công ty VASC cũng thực hiện giao dịch với Ngân hàng Ngoại thương VCB tuy nhiên mới chỉ là chuyển lương VCB và VASC dùng lệnh chuyển khoản trực tiếp VCB chấp nhận giao dịch với CA của VASC chứ không dùng chứng thực số của VASC để cung cấp tới khách hàng
Chữ ký số và chứng thực số hiện không héo nhưng khá ủ rũ, và Luật giao dịch điện tử
(xem phụ lục) được ban hành mới đây đang được kỳ vọng như một làn nước mát lành để các hình thức giao dịch điện tử trở nên "tươi tắn" trong cuộc sống
Khi luật có hiệu lực, thương mại điện tử sẽ bùng nổ mạnh bởi vì cung – cầu đều đã sẵn sàng Có người so sánh chữ ký số, chứng thực số và chữ ký "tươi" giống như cái cày và cái máy cày Khi có cái máy cày thì người làm đồng áng không ai không muốn sử dụng nó (cái cày) Việc tạo ra lợi ích, sự thuận tiện, tăng hiệu quả công của cái máy cày quá rõ, phân biệt
nó với cái cày thì quá dễ và việc học lái máy cày thực tế cũng không không phải trong tình trạng "cái khó bó cái khôn"
IV Nội dung thực hiện:
Tìm kiếm và nghiên cứu các tài liệu về mã hoá, hệ mật mã, công nghệ bảo mật SSL,… của các tác giả trong và ngoài nước, các bài báo, thông tin trên mạng,… sau đó chọn lọc và sắp xếp lại theo ý tưởng của mình
Khai thác các hệ thống mã nguồn mở (PHP, OpenSSL, GnuPG,…) và ngôn ngữ lập trình hướng đối tượng C# để viết một ứng dụng nhỏ về mã hóa và chữ ký số, trang web bán hàng qua mạng có hỗ trợ giao thức bảo mật SSL
Trang 141.1 Số nguyên tố và các định lý cơ bản của Số học:
Như ta đã biết, ký hiệu Z là tập các số nguyên: …,-2,-1,0,1,2,… và N là tập các số tự nhiên (tức là các số nguyên dương: 1,2,3,…)
Với a, b Z, ta nói rằng b chia hết cho a nếu như b có thể viết thành tích của a với một số nguyên khác; khi ấy ta cũng có thể nói rằng a chia hết b, hay a là một ước số của b, và
ký hiệu a | b Ta có một số tính chất:
Nếu a, b, c Z và a | b thì a | bc;
Nếu a | b và b | c thì a | c;
Nếu a | b và a | c thì a | b c;
Nếu a | b và a không chia hết c thì a không chia hết cả b + c lẫn b – c
Số tự nhiên lớn hơn 1 mà không chia hết cho số tự nhiên nào khác, trừ chính nó và 1,
thì được gọi là số nguyên tố Nếu p là một số nguyên tố thì ta sẽ sử dụng ký hiệu p || bđể chỉ rằng p | bnhưng 1
p không chia hết b
Định lý cơ bản của Số học: Mọi số nguyên lớn hơn 1 đều có thể được phân tích một
cách duy nhất dưới dạng tích các lũy thừa của các số nguyên tố khác nhau
Như vậy, với mọi số nguyên n > 1, ta luôn tìm được các số nguyên tố khác nhau r
p
p , ,1 và các số tự nhiên 1, ,r sao cho r
r p p
n 1
1
Dễ dàng thấy rằng )
1) (
1
(1 r là số lượng các ước số dương của n
Ví dụ: Với n = 90 ta có 90 = 21.32.51, cho nên nó có cả thảy (1 + 1)(2 + 1)(1 + 1) =
12 ước số dương
Hệ quả: Nếu p là một số nguyên tố và p | ab thì ít nhất một trong 2 số a, b phải chia
hết cho p
Ước chung lớn nhất của 2 số tự nhiên a, b là số lớn nhất trong tập các ước chung
của 2 số đó, được ký hiệu là gcd(a,b) hay đơn giản là (a,b) Như vậy, nếu d | a và d | b thì d | gcd(a, b)
Khi 2 số tự nhiên có ước chung lớn nhất là 1 thì chúng được gọi là nguyên tố cùng
nhau
1.2 Thuật toán Euclide và mở rộng:
Nếu như biết biểu thức khai triển thành tích của từng số nguyên a,b thì việc tính ước chung lớn nhất của chúng, gcd(a,b), quả là dễ dàng (chỉ việc lấy tích của tất cả các thừa số chung với số mũ bé hơn, trong 2 số mũ) Tuy nhiên trong thực tế tính toán với những số lớn thì việc khai triển thành tích là việc vô cùng gian nan, cho nên việc tính ước chung lớn nhất theo kiểu này là không “khả thi” Một giải pháp đơn giản hơn nhiều (và luôn khả thi) là dùng
thuật toán Euclide
Trang 15Thuật toán Euclide: Lấy số lớn hơn, ví dụ b, chia cho số bé hơn, ví dụ a, sẽ được số
dư r < a; lại coi a là số lớn còn r là số bé và tiếp tục quá trình trên, cho tới khi nào phép chia
có số dư là 0 thì dừng và số chia ở trong phép chia cuối chính là gcd(a,b)
vì số chia trong phép chia cuối cùng là 11 cho nên gcd(781,330) = 11
Thực ra, theo thuật toán Euclide, ta thấy gcd(a,b) cũng chính là số dư ở trong phép
chia ngay trước phép chia cuối cùng Từ phép chia đó, qua một loạt các bước thay thế liên tiếp (ở mỗi bước số gạch dưới là số được thay thế), ta thấy rằng:
Rõ ràng, khi p là số nguyên tố thì mọi số tự nhiên bé hơn nó đều là nguyên tố cùng
nhau với nó và do đó ta có (p)p1 Tổng quát hơn, khi p là số nguyên tố và r là một số tự
nhiên bất kỳ thì (p r) p r1(p1) p r(11/p)
Có thể chứng minh được rằng khi m, n là các số nguyên tố cùng nhau thì ta có
)()
().(m n m n
Trang 16và do đó để tính của một số tự nhiên nào đó người ta phân tích nó ra thành các thừa số nguyên tố rồi áp dụng các công thức trên
Ví dụ: (720)(24.32.5)(24).(32).(5)23(21).3(31).(51)192
Ta đã biết rằng việc phân tích các số lớn ra các thừa số nguyên tố là rất gian nan, cho nên việc tính Phi hàm của một số lớn cũng là như vậy
1.4 Phép tính đồng dư và phương trình đồng dư:
Có 2 cách hiểu về đồng dư: Một của các nhà số học và một của các chuyên gia máy
tính Các nhà số học nói rằng ab (modm) (đọc là “a đồng dư với b theo môđun m”) nếu a
và b sai khác nhau một bội của m, còn các chuyên gia máy tính thì bảo rằng a(modm)b
nếu số dư tìm được trong phép chia a và b cho m là bằng nhau Cả 2 cách hiểu trên đều có cùng bản chất nên ta không ngại khả năng nhầm lẫn, mà chỉ nên lưu ý làm việc ở đâu thì nói như thế nào
Phép tính đồng dư theo mod m dẫn đến việc tách tập số nguyên ra thành m lớp, mỗi lớp chứa các số nguyên đồng dư với nhau theo mod m Tập các lớp này được ký hiệu là Z/mZ
và chứa đúng m phần tử Mỗi lớp trong tập Z/mZ có đúng 1 số nằm trong đoạn [0,m – 1], cho
nên mỗi số nguyên trong đoạn này được xem là “đại diện” của một lớp
Một số tính chất của phép tính đồng dư:
aa (modm);
Nếu ab (modm) thì ba (modm);
Nếu ab (modm) và bc (modm) thì ac (modm);
Nếu ab (modm), cd (modm) thì
)
(modm
d b c
a , a.cb.d(modm) Như vậy, vì những tính chất trên của phép tính đồng dư ta có thể tự do thực hiện các
phép tính số học thông thường trên tập Z/mZ
Nếu x là một phần tử trong Z/mZ và gcd(x,m) = 1 thì tồn tại các số u, v sao cho ux +
vm = 1, tức là u.x1(modm), nên người ta nói x có nghịch đảo (trong Z/mZ) là u, và thường
ký hiệu phần tử nghịch đảo này là x hay 1/x 1
Ví dụ: Xét tập Z/9Z = {0,1,2,…,8} Để tìm phần tử nghịch đảo của 7 (tức là 1/7) ta
dùng thuật toán Euclide mở rộng, tức là phân tích:
9 = 1.7 + 2, 7 = 3.2 + 1, 2 = 2.1 + 0, rồi thế ngược trở lại ta có:
Nếu ab (modm), cd (modm) với gcd(c,m) = 1, thì
)(mod
.c 1 b d 1 m
Trang 17Ví dụ: Với Z/9Z = {0,1,2,…,8}, Z/9Z * = {1,2,4,5,7,8}, ta có 714(mod9)
và
phép chia của 2 cho 7 (trong Z/9Z *) được thực hiện như sau:
)9(mod84.27.27
Ta đương nhiên cũng có 27.8(mod9) vì 7.8 = 56 = 6.9 + 2
Phương trình đồng dư tuyến tính: axb (modm)
Khi gcd(a,m) = 1 (tức là khi a là phần tử của Z/mZ *) thì ta có ngay nghiệm:
)(mod1
m b
a
Khi gcd(a,m) = g thì có 2 khả năng xảy ra:
Phương trình có nghiệm khi g chia hết b, vì rằng khi ấy phương trình đã cho tương đương với phương trình (a/g)xb/g(modm/g), trong đó hệ số a / là nguyên tố g
cùng nhau với m/ g(đã xét ở trên)
Phương trình vô nghiệm nếu g không chia hết b, vì hiệu của 2 số chia hết cho g
thì không thể là một số không chia hết cho g
Nhận xét: Hệ quả trên, trong rất nhiều trường hợp, giúp ta giảm nhẹ việc tính toán
đồng dư của lũy thừa bậc cao một cách đáng kể
Ví dụ: Tính 21004(mod 15) Ta lưu ý rằng (15)(5).(3)4.28 và )
8(mod
4
1004 , cho nên từ kết quả trên ta có ngay:
1)15(mod16)15(mod2)15(mod
21004 4
Hệ quả 2: Nếu e, d là các số nguyên thỏa mãn e.d1(mod(m)) thì, với mọi số c nguyên tố cùng nhau với m, ta có (c e)d c(modm)
Trang 18Rõ ràng, với a = ed và b = 1, từ Hệ quả 1 ta có ngay Hệ quả 2 Hệ quả này đóng
vai trò then chốt trong việc thiết lập các hệ mã mũ sau này (kể cả hệ mã RSA)
1.6 Tính toán đồng dƣ của lũy thừa bậc lớn:
Như đã thấy, Hệ quả 1 của Định lý Euler có thể giúp ta giảm nhẹ việc tính toán đồng
dư của lũy thừa (bậc cao) một cách rất đáng kể Tuy nhiên nó chỉ thực sự hiệu quả khi a lớn
hơn hẳn (m), vì chỉ khi ấy thì b mới thực sự nhỏ hơn a Trong thực tế tính toán cũng thường đòi hỏi ta phải làm việc với những số m lớn, và cũng thường kéo theo (m) khá lớn, thậm chí
lớn hơn a Khi ấy người ta phải dùng các kỹ thuật khác, và một trong những cách hay được dùng nhất là phương pháp bình phương liên tiếp sau đây
Để hiểu rõ phương pháp này, ta chỉ cần đưa ra một ví dụ minh họa: Tính 87 43
(mod 103) Nếu làm xong phép tính lũy thừa rồi mới tính đồng dư thì không những sẽ phải làm việc
với những số rất lớn, mà còn gặp nguy hiểm ở chỗ “tràn bộ nhớ” Muốn tránh điều này, trước hết người ta tiến hành khai triển số mũ dưới dạng cơ số 2, tức là:
25,23,21,20 (rút gọn theo modulo 103) và sẽ thu được kết quả là:
2 Hàm một chiều và hàm một chiều có “cửa sập”:
Hàm f(x) được gọi là hàm một chiều (hay một phía), nếu tính y = f(x) là dễ, nhưng việc
tính ngược lại x f 1(y) là rất khó (theo nghĩa đòi hỏi thời gian tính toán cực lớn, đến mức
mà không máy tính nào đáp ứng nổi)
Ví dụ: Hàm f(x) = g x (mod p) (p là số nguyên tố, g là phần tử nguyên thủy theo
modulo p) là hàm một phía Vì biết x tính f(x) là khá đơn giản, nhưng biết f(x) để tính x thì với các thuật toán đã biết hiện nay đòi hỏi một khối lượng tính toán cỡ O(exp(lnplnlnp) 112 ) phép
tính (nếu p là số nguyên tố cỡ 200 chữ số thập phân, thì với khối lượng tính toán trên đòi hỏi
một máy tính có tốc độ xử lý 1 tỷ phép tính/giây làm việc không nghỉ trong khoảng 3000 năm)
Hàm f(x) được gọi là hàm một chiều (hay một phía) có cửa sập, nếu tính y = f(x) là dễ,
tính x f1(y) là rất khó, nhưng có cửa sập z để tính x f1z(y) là dễ
Trang 19Ví dụ: Cho n = pq là tích của hai số nguyên tố lớn, a là số nguyên, hàm f(x) = x a (mod n) là hàm một chiều có cửa sập, nếu chỉ biết n và a thì tính x f 1(y) là rất khó, nhưng
nếu biết cửa sập, chẳng hạn hai thừa số của n, thì sẽ tính được f1(y) khá dễ
II Những khái niệm cơ bản về mã hóa:
1 Một số thuật ngữ:
Văn bản (plaintext) là một thông báo gốc cần chuyển, được ghi bằng hình ảnh, âm
thanh, chữ số, chữ viết,… Về sau, khi đưa ra các ví dụ, ta thường xem các văn bản được viết bằng chữ viết, hoặc bằng chữ số Tuy nhiên, ngày nay mọi tín hiệu (âm thanh, hình ảnh) đều
có thể được số hóa (thành các xâu ký tự số), cho nên việc nghiên cứu trên các văn bản số không hạn chế các ứng dụng đa dạng của nó
Mã hóa (encryption) là việc “ngụy trang” văn bản (thông tin nói chung) sang một dạng
khác để cho những người “ngoài cuộc” không thể đọc được, phục vụ cho nhu cầu trao đổi thông tin, dữ liệu và các giao dịch tài chính, thương mại,… Quá trình “ngụy trang” văn bản
gọi là lập mã còn quá trình “khôi phục” lại văn bản nguồn (từ văn bản ngụy trang) gọi là giải
mã 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 cuộc”,
nhưng rất khó khăn (thậm chí là không thể thực hiện được) đối với “người ngoài cuộc” Văn
bản gốc (trước khi mã hóa) thường được ký hiệu là PT (plaintext), hay đơn giản là P Văn bản
mã (đã được cải trang) thường được ký hiệu là CT (ciphertext), hay đơn giản là C
Hệ mã (cryptosystem) là một phương pháp ngụy trang văn bản Nghệ thuật tạo ra và sử
dụng các hệ mã là thuật mã hóa hay mật mã học (cryptography)
Phân tích mã (cryptanalysis), hay thám mã, là nghệ thuật phá các hệ mã (nhìn xuyên
qua các phương pháp ngụy trang)
Công nghệ mã (cryptology) là việc nghiên cứu tổng hợp cả cryptography và
cryptanalysis
Lập mã (encrypt) là việc biến văn bản nguồn thành văn bản mã
Giải mã (decrypt) là việc đưa văn bản đã mã hóa trở về dạng văn bản nguồn
Định mã (encode/decode) là việc định ra phép tương ứng giữa các chữ và số (việc này
không bao giờ được xem là bí mật, vì máy tính ngày nay dễ dàng tìm ra phép tương ứng này trong một thời gian ngắn)
Mã dòng (stream cipher) là việc tiến hành mã hóa liên tục trên từng ký tự (hay từng bit)
Mã khối (block cipher) là việc tiến hành mã hóa trên từng khối văn bản
Phép mã chuyển vị (transposition cipher) là việc tráo đổi vị trí giữa các ký tự (các bit)
trong văn bản
Phép mã thay thế (substitution cipher) là việc thay thế một ký tự này bằng một ký tự
khác (mà không thay đổi vị trí)
Phép mã tích hợp (product cipher) là việc tiến hành xen kẽ 2 phép mã chuyển vị và thay thế
Chìa khóa mã (cipher key) là bí quyết lập mã và giải mã Nếu như quy trình mã hóa
được xem là một hàm y = f(x,k), trong đó x là đầu vào (văn bản nguồn), y là đầu ra (văn bản mã), f là phương pháp (hay thuật toán) mã hóa, còn k là một tham số điều khiển, thì bí quyết trước đây thường bao gồm cả phương pháp f, và tham số k (nếu có) Nhu cầu của thực tiễn hiện nay đã khiến công nghệ mã hóa hiện đại phải thay đổi quan điểm này Phương pháp f là
cái thường không chỉ do một người nắm, nên không thể giữ được bí mật lâu, và do đó phải
Trang 20được xem là công khai Tham số điều khiển k, có tác dụng làm thay đổi kết quả mã hóa (tùy thuộc vào giá trị của nó), được xem là chìa khóa mã Thông thường, nó là một xâu bit (hay
một con số nào đó) mà người ta có thể giữ riêng cho mình
Hệ mã bí mật (secret key cryptosystem – SKC) hay hệ mã đối xứng (symmetric
cryptosystem) là hệ mã mà trong đó việc lập mã và giải mã cùng sử dụng chung một chìa
khóa mã (bí mật)
Hệ mã công khai (public key cryptosystem – PKC) hay hệ mã phi đối xứng
(assymmetric cryptosystem) là hệ mã mà trong đó việc lập mã và giải mã sử dụng 2 chìa khóa
mã riêng biệt, từ chìa này không thể tìm ra chìa kia một cách dễ dàng; chìa dùng để lập mã
thường được thông báo công khai, còn chìa dành cho việc giải mã phải luôn giữ bí mật, thường được gọi là chìa khóa riêng
Vì vậy, phương pháp tốt nhất để giữ gìn bí mật thông tin là mã hoá chúng bằng một hệ mật
mã nào đó trước khi truyền đi
Dĩ nhiên, việc mã hóa thông tin trước khi truyền đi và việc giải mã các thông tin nhận được sẽ tạo nên một số khó khăn: giảm tốc độ truyền tin, tăng chi phí… Một hệ mã lý tưởng
là một hệ mã đảm bảo được các yêu cầu: thời gian mã hóa và giải mã nhanh, độ bảo mật cao (gây khó khăn tối đa cho người thám mã) Các yêu cầu đó luôn mâu thuẫn nhau, và người sử dụng cần hiểu rõ công nghệ mã hóa để có thể lựa chọn hệ mã thích hợp cho từng công việc và mục đích
Có nhiều phương pháp mật mã khác nhau, tuy vậy tất cả chúng có thể biểu thị bởi mô hình tổng quát như mô tả bên dưới:
Hình 1: Các ký hiệu của phép mã hóa và phép giải mã
Trong đó: E (Encipherment): Hàm lập mã,
D (Decipherment): Hàm giải mã,
k (Key): Khóa mã
Một cách tổng quát, người ta đã đưa ra định nghĩa về một hệ mật mã như sau: Một hệ
mật mã (cryptosystem) là một bộ năm thành phần (P, C, K, E, D) Trong đó:
(1) P là không gian bản rõ, tập hữu hạn các bản rõ có thể,
Trang 21(2) C là không gian bản mã, tập hữu hạn các bản mã có thể,
(3) K là không gian khóa, tập hợp hữu hạn các khóa có thể,
(4) Với mỗi khóa kK, tồn tại luật mã hóa EkE và luật giải mã DkD tương ứng, trong đó:
Ek: P C
Dk: C P
là 2 ánh xạ thỏa mãn D k (E k (x)) = x, với x P
Tính chất (4) là tính chất chính và quan trọng của một hệ thống mã hóa Tính chất này
bảo đảm việc mã hóa một mẩu tin x P bằng luật mã hóa Ek có thể được giải mã chính xác bằng luật Dk
3 Mã đối xứng và mã phi đối xứng:
Hai thuật ngữ này đã được đưa ra ở phần trên, nhưng ta cần làm rõ hơn các khái niệm quan trọng này
Khái niệm mã đối xứng được dùng để chỉ các hệ mã mà trong đó, khi biết khóa lập mã,
ta có thể tìm ra khóa giải mã, đồng thời, việc giải mã cũng đòi hỏi thời gian như việc lập mã Cho đến những năm cuối của thập niên 70 của thế kỉ 20, người ta mới chỉ biết đến một loại
mã như vậy Đối với các hệ mã này, cần phải giữ bí mật khóa lập mã, vì để lộ nó cũng tức là
để lộ cách giải mã Do đó, chỉ những người hoàn toàn chia sẻ mọi thông tin mật với nhau mới
có thể trao đổi với nhau bằng mật mã (thường chỉ được dùng trong quân sự, ngoại giao vì các bên có cùng chung quyền lợi nên sẵn sàng bảo vệ bí mật cho nhau trong quá trình trao đổi
thông tin) Các hệ mã đối xứng đang được sử dụng phổ biến hiện nay là DES (Data Encryption Standard), 3DES (Triple DES), IDEA (International Data Encryption Algorithm),
AES (Advanced Encryption Standard)
DES do hãng IBM đề xuất, lúc ban đầu được dùng trong nội bộ nhưng sau đó được chấp nhận đưa ra dùng chung cho các ứng dụng khác Thuật toán chuẩn DES được ứng dụng rộng rãi trong việc bảo vệ thông tin mật Độ mật của DES phụ thuộc vào không gian khoá Nó sử dụng 16 vòng lặp tương tự nhau, làm việc với các khối dữ liệu 64 bit, và sử dụng khóa ban đầu có độ dài 56 bit để sinh 16 khóa con (với độ dài 48 bit) Người lập mã và người giải mã đều dùng cùng một chìa
Ban đầu, DES xem ra có vẻ như là vững chắc Tuy nhiên, sau một thời gian dài sử dụng, những điểm yếu của DES cũng đã dần bộc lộ Với độ dài của chìa khóa chỉ vẻn vẹn có 56 bit,
số lượng chìa (có thể sinh ra) là không đủ nhiều so với số lượng chip và tốc độ xử lý của các siêu máy tính ngày nay, nhất là các dàn máy song song chuyên dụng phục vụ cho việc giải
mã
Năm 1992, người ta đã cải tiến hệ mã DES để đưa ra DES bội 3 (3DES), tức là mã hóa mẩu tin 3 lần (với cùng chuẩn DES nhưng theo quy trình lập mã và giải mã xen kẽ với các chìa khác nhau), độ bảo mật tăng lên nhiều
Thuật toán mã hóa dữ liệu quốc tế IDEA có 8 vòng, sử dụng 52 chìa khóa con (được sinh ra từ một chìa khóa ban đầu 128 bit) Mỗi chìa con có độ dài 16 bit Tại mỗi vòng của IDEA sử dụng tới 6 chìa con (4 cái dùng để “chỉnh trang” dữ liệu trước khi vào vòng, còn 2 cái dùng cho việc biến đổi bên trong của từng vòng) và sau vòng cuối cùng nó sử dụng thêm 4 chìa khóa con nữa (tổng cộng là 8 x (2 + 4) + 4 = 52) Mỗi khối dữ liệu trong IDEA có độ dài
64 bit được chia thành 4 phần, mỗi phần dài 16 bit
Nhược điểm của hệ mã đối xứng:
Trang 22- Nếu chìa khóa mà bị lộ thì địch thủ không những biết được các thông tin trao đổi giữa các bên mà còn có thể giả làm “bên này” để tạo ra các thông tin giả đánh lừa “bên nọ”
Vì vậy cần phải thay đổi chìa khóa thường xuyên
- Chìa khóa phải được phân phối một cách tuyệt mật Với các hệ mã sử dụng trên mạng diện rộng thì đây là việc rất khó khăn (người ta phải “chuyền tay” các chìa đến nơi nhận)
- Nếu cứ mỗi cặp 2 người sử dụng riêng một chìa thì việc trao đổi thông tin giữa n người phải sử dụng tới C2n chìa (ví dụ với 10 người phải dùng 45 chìa, với 11 người phải dùng 55 chìa,…) và như vậy số lượng chìa tăng lên rất nhanh theo số người trong hệ thống Mỗi cá thể phải nhớ và giữ bí mật quá nhiều khoá
Sự phát triển của xã hội dẫn đến việc ngày nay mật mã không những chỉ được dùng trong bí mật quân sự và ngoại giao, mà còn dùng, và có thể chủ yếu là dùng trong bí mật kinh
tế, tài chính, thương mại Vì thế xuất hiện những đòi hỏi mới đối với các hệ mật mã hiện đại,
khác về nguyên tắc so với mật mã thường dùng trước đây Mật mã có khóa công khai (mã phi
đối xứng) ra đời để khắc phục nhược điểm của mã đối xứng
III Mật mã có khóa công khai:
1 Giới thiệu về mật mã có khóa công khai:
Năm 1976, Diffie và Hellman công bố một phát kiến mới mang tên “Các hướng mới
trong mật mã” (New directions in cryptography) Công trình đề xuất một dạng mới của hệ
thống mật mã, trong đó người gửi và người nhận sử dụng các khoá mã khác nhau nhưng có
mối liên hệ với nhau, và một trong hai khoá mã đó được giữ bí mật Bên nhận dữ liệu giữ một
khoá bí mật (khóa riêng) cho phép giải mã với khoá đó, còn bên gửi sử dụng một khoá khác
có liên hệ với khoá riêng trên để mã hoá dữ liệu, khoá đó gọi là khoá công khai Hệ thống dùng khoá như vậy gọi là “hệ thống không đối xứng” bởi vì nó bảo đảm bí mật cho việc
truyền tin chỉ một chiều, muốn thiết lập bí mật truyền tin theo chiều ngược lại phải sử dụng một cặp khoá thứ hai
Một hệ thống mật mã có khóa công khai có cái lợi là không cần phải truyền khóa bí mật giữa A và B với sự thiết lập một kênh được bảo vệ Việc truyền một khóa bí mật trên đường truyền có thể có nhiều nguy hiểm không thể lường trước được và các thể thức của chúng cũng phức tạp, rườm rà
Cặp khoá công khai được tạo ra theo một phương pháp đặc biệt có quan hệ với nhau và được chọn trong nhiều khoá có thể (trong đó nếu khoá này dùng để mã hoá thì khoá kia dùng
để giải mã) Hình bên dưới mô tả rõ ràng mối quan hệ đó
Trong đó:
ks (seed) là mầm khóa hay khóa khởi thảo được chọn theo phương pháp ngẫu nhiên
Hai thuật toán F, G dùng để tính toán các khoá Bên nhận dùng hai thuật toán F và
G cùng với mầm khoá ks để tạo ra hai khoá: khoá riêng kd dùng để giải mã được giữ lại sử dụng riêng cho mình còn khóa ke được công khai cho bên gửi dùng để mã hóa thông tin gửi cho bên nhận
D là thuật toán giải mã với khóa
riêng kd (hai thuật toán E và D là đồng nhất, các kết quả mà chúng đưa ra khác nhau là bởi vì chúng sử dụng các khóa khác nhau)
Trang 23Hình 2: Sơ đồ khối nguyên lý hoạt động của mật mã khoá công khai
Các công bố đầu tiên về mật mã khoá công khai của Diffie và Hellman chỉ đưa ra ý tưởng là có thể thực hiện được với những hệ mật mã như vậy, chứ không chỉ rõ cách xây dựng các hàm mã hoá E, giải mã D, thuật toán sinh khoá F, G thực hiện cụ thể như thế nào
2 Nguyên tắc chung của mã hóa với khóa công khai:
Giả sử trong hệ thống đang xét có n cá thể cùng trao đổi các thông tin mật Mỗi cá thể chọn cho mình một khóa lập mã k và một công thức mã hóa E k được thông báo công khai
Như vậy có n khóa lập mã công khai k 1,k 2 ,…, k n Khi cá thể thứ i muốn gởi thông báo cho cá thể thứ j, thông báo này được chuyển thành số, nhóm thành từng “khối” với độ dài nào đó Sau đó mỗi khối P trong văn bản được mã hóa bằng khóa lập mã k (đã được thông báo công j
khai) thông qua công thức mã hóa
j j
j k k
k ( ) ( ) , bởi vì
D là các khóa lập mã và giải mã của cùng một cá thể thứ j Các cá thể
khác trong hệ thống, nếu nhận được văn bản mật, cũng không thể nào giải mã, vì việc biết khóa lập mã
D trong thời gian chấp nhận được
Các nguyên tắc vừa trình bày trên đã được cụ thể hóa bằng hệ mã khóa công khai được
phát minh năm 1978 bởi Rivest, Shamir và Adleman (thường được gọi là hệ mã RSA)
3 Hệ mã RSA:
Thuật toán này được xây dựng dựa trên độ khó của việc phân tích các số lớn thành các thừa số, nhất là các thừa số nguyên tố
Thuật toán RSA có hai khóa: khóa công khai và khóa riêng (bí mật) Mỗi khóa là một
số cố định sử dụng trong quá trình mã hóa và giải mã Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa riêng tương ứng Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa riêng mới có thể giải mã được
Trang 24Theo sơ đồ ở hình 2, với khoá công khai ke, hàm E (là một hàm công khai) dùng tham
Thuật toán sinh khóa:
• Tóm lược: Mỗi cá thể tạo một khóa công khai và một khoá bí mật tương ứng
• Các bước sinh khóa:
(1) Sinh ngẫu nhiên hai số nguyên tố lớn p và q (p q),
(2) Tính tích n = p.q và (n)(p1)(q1) là giá trị hàm Euler của n,
(3) Chọn ngẫu nhiên một số nguyên e sao cho 1 < e < (n) và (e,(n)) = 1,
(4) Sử dụng thuật toán Euclide mở rộng để tính một số nguyên d duy nhất,
với 1 < d < (n) thỏa mãn ed1(mod(n)),
(5) Khóa công khai là cặp số (n, e), khóa bí mật là cặp số (n, d)
• Lưu ý: Nên chọn e là số nguyên tố tuỳ ý không quá nhỏ Số e được chọn nhất
thiết phải thoả mãn 2e > n Nếu điều kiện này không thoả mãn thì có khả năng xảy ra trường hợp Pe < n, và như vậy để tìm ra P chỉ cần thực hiện phép “khai căn thông thường” bậc e của
C vì khi ấy P e(modn)P e
• Các số nguyên d và e trong thuật toán sinh khóa RSA được gọi là số mũ mã hóa
và số mũ giải mã Số n được gọi là modulo
Thuật toán mã hóa:
• Giả sử A cần mã hoá một thông điệp P để gửi đến B
• Các bước mã hóa (A phải làm như sau):
(1) Thu nhận khóa công khai (n,e) của B,
(2) Biểu diễn thông điệp P dưới dạng một số nguyên m trong khoảng [0,n - 1],
(3) Tính Cm e (mod n),
(4) Gởi bản mã C cho B
Thuật toán giải mã:
Để được bản rõ P từ C, B phải làm như sau: Dùng khóa riêng (n, d) của B tính
Trang 25- Tìm d là nghịch đảo của e = 13 mod 2436 tức là ed1(mod2436) Theo thuật toán Euclide mở rộng dễ dàng tính được d = 937
- Vậy: khóa công khai là (2537, 13), khóa riêng là (2537, 937)
• Mã hóa:
Để mã hóa thông điệp P: PUBLIC KEY CRYPTOGRAPHY
- Giả sử ta có bảng chữ cái ứng với các chữ số sau:
1520 0111 0802 1004 2402 1724 1519 1406 1700 1507 2423 Khối cuối cùng chỉ có 2 chữ số, ta thêm một ký tự giả X = 23 vào cho hoàn chỉnh một khối có 4 chữ số
- Mã hóa riêng từng khối bằng hàm mã hóa C m13(mod2537)
Ví dụ với khối đầu tiên (1520), ta thu được khối mã
C1 = (1520)13 mod 2537 = 95 Tương tự như vậy, ta thu được bản mã C của thông điệp:
0095 1648 1410 1299 0811 2333 2132 0370 1185 1457 1084
• Giải mã:
- Để giải mã khối thông điệp C, ta dùng hàm giải mã: mC937(mod2537)
Ví dụ với khối mã đầu tiên (0095), ta thu được khối rõ
m1 = (0095)937 mod 2537 = 1520 Tương tự như vậy, ta thu được bản rõ m (đã số hóa) của thông điệp:
1520 0111 0802 1004 2402 1724 1519 1406 1700 1507 2423
- Dựa vào bảng chữ cái trên ta có bản rõ P ban đầu (sau khi thêm vào khoảng trắng và loại bỏ ký tự giả)
3.2 Độ an toàn của RSA:
Tính mật của RSA chủ yếu dựa vào việc bảo vệ khoá riêng d và giữ bí mật các số nguyên tố p và q
Nếu ta chọn các số p và q khoảng 100 chữ số thập phân, thì n sẽ có khoảng 200 chữ
số thập phân Để phân tích một số nguyên lớn như thế, với các thuật toán nhanh nhất hiện nay
và với những máy tính hiện đại nhất, ta mất hàng tỉ năm
Sau khi tìm ra hệ mã, Rivest, Shamir và Adleman có viết một bài báo công bố phát minh mới dưới dạng một thông báo khoa học của MIT và, trên cột Martin Gradner’s của tờ
Trang 26báo Scientific American, họ có đưa ra lời thách thức bạn đọc bẻ khóa một mẩu tin nhỏ đã được mã hóa với:
n = 11438162575788886766923577997614661201021829672124236256256184293
5706935245733897830597123563958705058989075147959290026879543541
e = 9007
Mẩu tin: “first solver wins one hundred dollars” xuất hiện trong dạng mã hóa (với A
= 01, B = 02, C = 03,…) chỉ được giải mã vào ngày 26/04/1994, bằng một cố gắng tổng lực
mang tính quốc tế (qua internet) với việc sử dụng 1600 workstation, mainframe và
suppercomputer tấn công trong 8 tháng liên tục để phân tích số nêu trên ra thừa số nguyên tố
Thực tế này cho thấy là thuật toán RSA rất an toàn, vì không mấy khi có điều kiện để huy động một lược lượng tính toán hùng hậu như thế vào công việc giải mã một mẩu tin
Có một vài lưu ý khi chọn các số p và q để tránh rơi vào trường hợp tích pq bị phân tích nhanh nhờ những thuật toán đặc biệt: p và q cần chọn sao cho p – 1 và q – 1 không chỉ có toàn các ước nguyên tố nhỏ (có phân tích “vụn”) Ngoài ra, ước chung lớn nhất (p–1,q–1) phải là số nhỏ, p và q phải có số chữ số trong khai triển thập phân khác nhau không nhiều
3.3 Các ứng dụng quan trọng:
Do tính đơn giản trong thiết kế nên RSA được ứng dụng rộng rãi và dùng nhiều nhất trong số các thuật toán với khoá công khai Và cũng chính vì thế nó đã trải qua nhiều thử thách, xem xét, kiểm chứng của cộng đồng về độ an toàn của nó Thực tiễn triển khai cho thấy
RSA có tốc độ mã hóa rất chậm (lâu hơn gấp hàng ngàn lần), vì thế dùng RSA để mã hoá
khối dữ liệu lớn là không khả thi Tuy nhiên, người ta đã tìm ra các ứng dụng quan trọng độc đáo khác của RSA hơn là dùng nó để mã hóa
a Tạo vỏ bọc an toàn cho văn bản mật:
Một trong những ứng dụng quan trọng của RSA là được sử dụng kết hợp với một
hệ mã hóa đối xứng có tốc độ cao như DES, IDEA,… Khi ấy, DES hoặc IDEA sẽ được sử dụng để mã hóa toàn bộ văn bản (bằng một khóa đối xứng bí mật nào đó), còn RSA được sử dụng để mã hóa cái chìa khóa mà DES (hay IDEA) đã dùng để mã hóa văn bản Chìa khóa này có độ dài không đáng kể (cỡ vài trăm bit) cho nên thời gian mã không còn là vấn đề Do tính an toàn cao, chìa khóa đối xứng (của DES, IDEA,…) được mã bằng RSA sẽ được gửi một cách an toàn đến cho người nhận để làm công cụ giải mã Như vậy, các hệ mã đối xứng
đã góp phần khắc phục tốc độ mã hóa chậm chạp của RSA, còn RSA khắc phục khâu yếu nhất của các hệ mã đối xứng là chuyển giao chìa giải mã cho người nhận một cách an toàn Như vậy, RSA trên thực tế đã tạo một “vỏ bọc số” an toàn cho văn bản thay vì thực hiện việc trực tiếp mã hóa văn bản
b Vấn đề xác nhận chủ thể:
Ta đã biết trong hệ mật mã khoá công khai thì mọi người đều biết khoá công khai của từng cá thể trong hệ thống, như vậy liệu có thể có một cá thể này đã mạo danh một cá thể khác để gửi thông điệp đến một cá thể thứ ba trong hệ thống, điều này hoàn toàn có thể xảy
ra, vậy làm thế nào để thông điệp được gửi đi có một chữ ký xác nhận của người gửi, để
người nhận có thể biết đích xác rằng mình nhận của ai và người gửi cũng không thể thoái thác được trách nhiệm của văn bản mình đã gửi đi, đây chính là vấn đề xác thực chủ thể trong trao đổi thông tin điện tử Hai chìa khoá công khai và khoá riêng trong hệ RSA là có vai trò “đối xứng” nhau theo nghĩa nếu cái này được dùng để mã hoá thì cái kia được dùng để giải mã và
ngược lại Vậy nếu A dùng khoá bí mật để mã hoá văn bản gửi đi thì B dùng khoá công khai
của A để giải mã văn bản, điều đó chứng tỏ A đã xác nhận ký vào văn bản Rõ ràng, không ai
Trang 27“mạo” được chữ ký của A vì không ai có được cái chìa bí mật của A Phần Chữ ký số sẽ nói
rõ hơn vấn đề này
3.4 Quản lý khóa:
Một trong các vai trò chính của mã hoá khoá công khai là giải quyết vấn đề phân phối khoá Khi sử dụng mã hoá khoá công khai, chúng ta cần phân biệt hai khái niệm sau:
Phân phối các khoá công khai
Sử dụng mã hoá với khoá công khai để phân phối các khoá bí mật
a Phân phối các khoá công khai:
Trong lịch sử mật mã đã có nhiều đề xuất về việc phân phối các khoá công khai, những phương án này có thể chia thành các nhóm sau:
(i) Khai báo công khai:
Đặc điểm của mã hoá khoá công khai là khoá công khai được công bố công khai Do vậy, nếu có một thuật toán được chấp nhận rộng rãi, chẳng hạn như RSA, bất kỳ thành viên nào cũng có thể thông báo khoá công khai của mình để cho các thành viên khác được biết
Hình 3: Phân phối khoá công khai không kiểm soát
Giải pháp này là khá thích hợp, nhưng có nhược điểm là bất kỳ ai cũng có thể giả mạo một khoá công khai Có nghĩa là một người sử dụng nào đó có thể mạo danh cá thể B
và gửi một khoá công khai cho các thành viên khác Các thành viên khác cứ tưởng đấy là khoá công khai của B nên đã gửi các thông điệp cho B (giả mạo), và như thế là kẻ giả mạo đàng hoàng đọc được hết các thông điệp mã hoá gửi cho B, ngoài ra còn có thể sử dụng các khoá giả xác thực cho đến khi cá thể B phát hiện ra sự giả mạo đó và thông báo cho các thành viên khác
Giao thức để A gởi thông tin cho B trong trường hợp này gồm các bước sau:
(1) A và B thống nhất với nhau về hệ mã công khai sẽ sử dụng,
(2) B gởi chìa khóa công khai của mình cho A,
(3) A sử dụng chìa công khai mà B gửi cho để mã hóa văn bản rồi gửi cho B,
(4) B dùng chìa khóa riêng của mình để giải mã văn bản mà B đã gửi
(ii) Thƣ mục khóa công khai:
Việc duy trì và tổ chức một thư mục (cơ sở dữ liệu) khóa công khai thuộc về một tổ chức được tin cậy nào đó
Trang 28Hình 4: Công bố khóa công khai vào thư mục khóa
Một lược đồ như vậy bao gồm các yếu tố sau:
• Tổ chức có nhiệm vụ duy trì thư mục, mỗi thành viên có một entry (định danh, khoá) trong thư mục,
• Mỗi thành viên đăng ký một khoá công khai với tổ chức quản lý thư mục,
• Mỗi thành viên có thể thay thế một khoá công khai bất cứ lúc nào khi cảm thấy khoá riêng bị lộ,
• Cơ quan quản lý công bố toàn bộ thư mục và có nhiệm vụ cập nhật thư mục một cách định kỳ,
• Mọi thành viên đều có thể truy nhập vào thư mục bất cứ lúc nào, vì thế việc truyền thông xác thực an toàn (từ cơ quan quản lý đến các thành viên) phải mang tính bắt buộc
Giao thức để A gởi thông tin cho B trong trường hợp này gồm các bước sau:
(1) A lấy chìa khóa công khai của B từ thư mục khóa công khai,
(2) A dùng chìa khóa công khai của B để mã hóa văn bản rồi gửi cho B,
(3) B dùng chìa khóa bí mật của mình để giải mã văn bản do A gửi đến Thực ra giao thức này giống với công việc gửi thư thông thường hơn là một giao thức thực thụ, vì B không cần phải tham gia vào quá trình cho tới khi muốn đọc thông tin nhận được từ A
Giao thức trên chỉ an toàn, nếu như quá trình A lấy chìa khóa công khai của B
từ thư mục khóa trên mạng được thực hiện một cách hoàn hảo Trên thực tế điều này không phải đơn giản, nếu như cơ sở dữ liệu công cộng này không được bảo vệ khỏi các cuộc truy cập bất hợp pháp với âm mưu tráo đổi chìa khóa người này sang cho người khác Nếu để xảy
ra khả năng truy cập kiểu này thì hệ thống sẽ bị tổn thương bởi thủ đoạn tấn công theo kiểu
“người chặn giữa”
(iii) Trung tâm quản lý khóa công khai:
Việc phân phối khoá công khai được an toàn cao hơn nếu cung cấp các kiểm soát chặt chẽ khi phân phối khoá công khai từ thư mục Một cơ quan trung tâm duy trì một thư mục khoá công khai Mỗi thành viên đều biết khoá công khai của trung tâm quản lý khoá công khai, nhưng chỉ có trung tâm này biết khoá riêng cùng cặp
Và quá trình trao đổi thông tin bí mật diễn ra như sau:
(1) A gửi một thông điệp có gán nhãn thời gian cho cơ quan quản lý khoá công khai, yêu cầu khoá công khai hiện thời của B
Trang 29Hình 5: Lược đồ phân phối khoá công khai
(2) Cơ quan quản lý trả lời bằng một thông điệp Thông điệp này được mã hoá bằng khóa riêng dau của cơ quan quản lý Thông điệp này bao gồm:
• Khoá công khai eb của B (A có thể dùng nó để mã hoá các thông điệp gửi cho B)
• Yêu cầu gốc (Request) - A so khớp yêu cầu này với yêu cầu A đã gửi đi trước đó, nhờ đó A có thể biết yêu cầu gốc có bị sửa đổi trước khi cơ quan quản lý nhận được hay không
• Nhãn thời gian gốc (Time1) - cho phép A xác định được rằng: Đây không phải là một thông điệp cũ mà là thông điệp mới có chứa khoá công khai hiện thời của
B
(3) A lưu giữ khoá công khai của B và sử dụng nó để mã hoá một thông điệp gửi cho B, thông điệp này chứa tên của A (IDA) và một giá trị (được gọi là nonce) N1 để nhận dạng giao dịch này
(4) B lấy khoá công khai của A từ cơ quan quản lý khoá (tương tự như A đã lấy khoá công khai của B)
(5) Như thế là A và B đã chuyển giao khoá công khai một cách an toàn, và
họ có thể gửi và nhận tin của nhau
Tuy nhiên hai bước sau được bổ sung thêm xem như là những tùy chọn:
(6) B gửi thông điệp cho A, thông điệp này được mã hoá bằng khoá ea và có chứa N1 của A và một nonce mới N2 do B sinh ra Do chỉ có B mới có thể giải mã thông điệp
(3) và sự có mặt của N1 trong thông điệp (6) đảm bảo với A rằng B chính là người A đang liên lạc
(7) A trả lại N2 cho B bằng khoá công khai của B, đảm bảo với B rằng A chính là người đang liên lạc với B
Trang 30(iv) Các chứng chỉ khóa công khai:
Việc phân phối khoá công khai được minh họa trong hình trên (mục iii)là khá hấp dẫn Tuy nhiên dễ bị giả mạo (do mỗi đầu vào bao gồm tên và khoá công khai trong một thư mục do cơ quan quản lý duy trì)
Một giải pháp mới được lựa chọn là dùng chứng chỉ Các thành viên sử dụng
chứng chỉ này để trao đổi khoá mà không cần liên lạc với cơ quan quản lý khoá công khai Mỗi chứng chỉ chứa một khoá công khai và các thông tin khác Nó được một cơ quan quản lý chứng chỉ tạo ra và phát hành cho các thành viên Mỗi thành viên thông báo khoá công khai của mình cho các thành viên khác thông qua chứng chỉ
Chứng chỉ được định nghĩa là một “tài liệu có chứa một công bố đƣợc chứng
thực, nhƣ là sự khẳng định đúng đắn về một điều gì đó” Trong lĩnh vực điện tử, chứng chỉ
là một tài liệu chứa một tập hợp thông tin có chữ ký số của một người có thẩm quyền và người này được cộng đồng những người sử dụng chứng chỉ công nhận và tin cậy
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 định danh của đối tượng đó với một khoá công khai 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 Hệ mã khoá công khai sử dụng chứng chỉ số để giải quyết vấn đề mạo danh
Để 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ư: Đã qua sát hạch bằng lái, 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ố (CA), một tổ chức có
thẩm quyền xác nhận định danh và cấp các chứng chỉ số Họ có thể là một thành phần thứ ba đứng độc lập hoặc các tổ chức tự vận hành phần mềm cấp chứng chỉ số của mình Các phương pháp để xác định định danh phụ thuộc vào các chính sách mà CA đặt ra Thông thường, trước khi cấp một chứng chỉ số, CA sẽ công bố các thủ tục cần phải thực hiện cho các loại chứng chỉ số
Trong chứng chỉ số chứa một khoá công khai được gắn với một tên duy nhất của một đối tượng (như tên của một nhân viên hoặc server) Chứng chỉ số giúp ngăn chặn việc
sử dụng khoá công khai cho việc giả mạo Chỉ có khoá công khai được chứng thực bởi chứng chỉ số mới làm việc với khoá riêng (private key) tương ứng được sở hữu bởi đối tượng mà có chỉ danh đã được chứng thực nằm trong chứng chỉ số
Hệ thống chứng chỉ khoá công khai làm việc như sau: CA phát hành chứng chỉ
cho những người nắm giữ cặp khoá công khai và khoá riêng Mỗi chứng chỉ gồm có một
khoá công khai và thông tin nhận dạng chủ thể của chứng chỉ Chủ thể của chứng chỉ là
cá thể nắm giữ khoá riêng tương ứng gọi là thuê bao của CA Các chứng chỉ được CA ký bằng khoá riêng của CA
Việc sử dụng chứng chỉ rất đơn giản, giả sử người sử dụng đã có khoá công khai của CA và anh ta tin tưởng CA phát hành chứng chỉ một cách hợp lệ Nếu cần khoá công khai của một người nào đó trong các thuê bao của CA anh ta chỉ việc lấy bản sao chứng chỉ của thuê bao đó và dùng khoá công khai của CA để kiểm tra chữ ký của CA
Đặc trưng quan trọng của chứng chỉ là: “Các chứng chỉ có thể đƣợc phát
hành mà không cần phải bảo vệ thông qua các dịch vụ an toàn truyền thông truyền thống để đảm bảo bí mật, xác thực và tính toàn vẹn” Bởi vì các chứng chỉ có khả năng tự
bảo vệ bằng chữ ký số của CA (đảm bảo tính xác thực và toàn vẹn)
Trang 31Hình 6: Chứng chỉ khoá công khai đơn giản
Lợi ích của chứng chỉ khoá công khai là một người sử dụng có thể có được một
số lượng lớn các khoá công khai của các thành viên khác một cách tin cậy chỉ cần thông qua khoá công khai của CA
Giấy chứng nhận Certificate X.509:
Tương tự như các hoạt động trong thực tế, mỗi công ty được cấp một giấy phép sản xuất hay kinh doanh, chúng ta cũng có thể tạo ra các giấy chứng nhận để xác thực trong quá trình trao đổi tin Giấy chứng nhận được một cơ quan, một tổ chức có thẩm quyền (được luật pháp thừa nhận) CA cấp và những người được cấp sẽ được xác thực và dựa vào giấy chứng nhận đó để bảo mật tin (mã hoá tin), rồi gửi đi Những người nhận tin cũng được cấp một giấy chứng nhận cho phép họ xác thực và giải mã những thông tin nhận được
Một trong các mẫu ký xác nhận được sử dụng phổ biến là mẫu X.509 được định nghĩa bởi ISO/IFC/ITU Khuôn dạng chứng chỉ X.509 gồm ba phiên bản: Phiên bản 1 ra đời năm 1988, phiên bản 2 năm 1993 và phiên bản 3 năm 1996 Ở dạng đơn giản nhất, X.509 chứa các thông tin sau:
- Phiên bản (version) của bằng chứng thực,
- Số hiệu của bằng chứng thực
- Tên thuật toán ký xác nhận (tên gọi và các tham số)
- Tên người ký: Tên của CA phát hành
- Thời gian có hiệu lực: Ngày bắt đầu và hết hạn của chứng chỉ
- Định danh của người được chứng thực: Chủ thể nắm giữ khoá riêng
- Thông tin về khóa công khai của chủ thể được cấp giấy chứng nhận: khoá công khai và tên thuật toán sử dụng khoá công khai
- Chữ ký (mã băm cho các trường dữ liệu, mã hoá chữ ký bằng khóa riêng)
Trang 32Hình 7: Một đoạn mẫu của chứng chỉ X.509
Các yêu cầu của lược đồ trao đổi các chứng chỉ khoá công khai:
(1) Một thành viên có thể đọc chứng chỉ để xác định tên và khoá công khai của cá thể sở hữu chứng chỉ
(2) Một thành viên có thể kiểm tra: Nguồn gốc của chứng chỉ để biết nó có thể bị giả mạo hay không
(3) Chỉ có cơ quan quản lý chứng chỉ mới có thể tạo ra và cập nhật các chứng chỉ
(4) Mọi thành viên có thể kiểm tra sự lưu hành của chứng chỉ
b Sử dụng mã hoá với khoá công khai để phân phối các khoá bí mật:
Trang 33Merkle đưa ra một lược đồ rất đơn giản (minh hoạ trong hình bên dưới) Nếu A muốn trao đổi thông tin mật với B, thủ tục được thực hiện tuần tự theo các bước sau:
(1) A tạo ra một cặp khoá (ea, da) và truyền thông điệp cho B biết khoá công khai ea và tên của A (IDA);
(2) B tạo ra một khoá bí mật ks Gửi khoá bí mật đó cho A: E e (k s)
a ;
(3) A tính toán để biết khoá bí mật ks do B gửi đến bằng việc giải mã thông điệp
s s
Hình 8: Sử dụng mã hóa khóa công khai để thiết lập một khóa phiên
Bây giờ A và B có thể trao đổi với nhau bằng khoá phiên ks Sau khi trao đổi xong
cả A và B cùng huỷ bỏ ks, như vậy theo cách này thì việc đảm bảo bí mật là rất tốt vì trước và sau khi liên lạc không có khoá nào tồn tại Rủi ro lộ khoá là rất nhỏ Tại thời điểm này việc liên lạc là đảm bảo an toàn Đây là một giao thức hấp dẫn
Tuy nhiên, thủ tục này có điểm yếu là dễ bị tấn công chủ động Nếu một cá thể C chủ động muốn nghe trộm thông tin trao đổi giữa A và B, C sẽ tìm cách kiểm soát đường truyền thông giữa hai người C có thể “dàn xếp” cuộc truyền thông mà không bị phát hiện, theo hình thức sau đây:
(1) A tạo ra một cặp khoá (ea, da) và truyền một thông điệp cho B, thông điệp là cặp (ea, IDA);
(2) C chặn lấy thông tin, tạo ra một cặp khoá (ec, dc) và truyền cho B một thông điệp là cặp (ec, IDA);
(3) B tạo ra một khoá bí mật ks, gửi khoá bí mật đó cho A: E e (k s)
c ;
(4) C chặn lấy thông điệp, tínhk s D d (E e (k s))
c c
Sau đó truyền cho A: E e (k s)
a ; Cuối cùng là A và B cùng biết ks, nhưng không biết rằng ks đã bị C tóm lấy vì vậy mọi thông tin trao đổi giữa A và B đều bị C nghe trộm một cách đơn giản Vậy liệu có cách nào để chống lại các kiểu tấn công chủ động cũng như thụ động không? Ta thử xem xét việc phân phối khoá theo giao thức sau, nó sẽ thực hiện được điều đó
(v) Phân phối khoá bí mật bảo đảm tính bí mật và xác thực:
Lược đồ trong hình bên dưới có thể chống lại các kiểu tấn công Ở đây ta xem như A và B đã trao đổi khoá công khai mà trong các lược đồ trước đã nêu Các bước tiếp theo diễn ra như sau:
(1) A sử dụng khoá công khai của B (eb) để mã hoá thông điệp (a) gửi cho B: )
Trang 34Hình 9: Sử dụng mã hoá khoá công khai để trao đổi khoá bí mật
(2) B gửi thông điệp (b) cho A Thông điệp được mã hoá bằng ea N1 xác thực rằng A đang liên lạc với B, N2 là giá trị nonce mới do B sinh ra;
(3) A trả lại N2, được mã hoá bằng khoá công khai của B để đảm bảo rằng B đang liên lạc với A, đồng thời gửi khoá bí mật ks do A sinh ra: c E e (N2,E d (k s))
a b
IV Hàm băm mật mã:
1 Giới thiệu sơ lƣợc về hàm băm mật mã:
Các hàm băm nhận một chuỗi bit có chiều dài tùy ý (hữu hạn) làm dữ liệu đầu vào và tạo ra một chuỗi bit có chiều dài cố định bằng n bit (n > 0 là hằng số), gọi là mã băm (hash
code hay message digest)
Kí hiệu D là miền xác định và R là miền giá giá trị của hàm băm h(x), ta thường có số
lượng phần tử của D (ký hiệu là |D|) lớn hơn rất nhiều so với số lượng phần tử trong R, và vì
vậy, hàm băm h(x) không thể là đơn ánh, tức là luôn tồn tại một cặp đầu vào khác nhau có
cùng giá trị mã băm Giả sử hạn chế hàm h(x) trên miền xác định chỉ bao gồm các chuỗi bit
có chiều dài bằng t (t > n) Nếu h(x) là “ngẫu nhiên” theo nghĩa tất cả các giá trị đầu ra của nó
có xác suất bằng nhau thì có khoảng 2(t-n) đầu vào ánh xạ vào mỗi giá trị đầu ra Xác suất để hai giá trị đầu vào (có chiều dài bằng nhau) ánh xạ vào cùng một giá trị đầu ra sẽ bằng 2n
(hoàn toàn không phụ thuộc vào t) Nếu n khá lớn thì 2n sẽ rất nhỏ Nhờ vậy, mặc dù với mỗi chuỗi bit cho trước thường tồn tại một (hoặc nhiều) chuỗi bit khác sao cho mã băm của
nó trùng với mã băm của chuỗi bit đã cho, nhưng việc tính toán để tìm ra chuỗi bit này là rất khó nếu ta chọn được hàm h(x) thích hợp và giá trị n (chiều dài mã băm) là đủ lớn
Mã băm được xem như là hình ảnh đặc trưng thu gọn (compact representative image)
của một chuỗi bit có độ dài tùy ý (hữu hạn), và được dùng để nhận diện chuỗi bit đó, kết hợp
với công cụ tạo chữ ký số (digital signature), các hàm băm được dùng cho việc bảo đảm tính
toàn vẹn của dữ liệu
2 Phân loại các hàm băm mật mã:
Các hàm băm mật mã được phân thành 2 lớp: lớp các hàm băm không có khóa (unkeyed hash functions) và lớp các hàm băm có khóa (keyed hash functions) Các hàm băm không
Trang 35khóa chỉ có duy nhất một đầu vào là thông điệp (message) cần tính giá trị băm Còn các hàm
băm có khóa nhận hai giá trị đầu vào: thông điệp cần tính giá trị băm và khóa bí mật để tiến
Hàm băm một chiều (one-way hash functions – OWHFs) 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 đầ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 functions – CRHFs) 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
Ở đây ta hiểu “không thể tính toán” theo nghĩa độ phức tạp tính toán là trên đa thức (supper-polynomial), hoặc tính toán đòi hỏi nguồn tài nguyên (không gian lưu trữ) vượt quá khả năng có thể cung cấp
Các định nghĩa của hàm băm một chiều và hàm băm kháng xung đột sẽ được phát biểu
trong phần tiếp theo
3 Các khái niệm và định nghĩa:
3.1 Định nghĩa tổng quát của hàm băm:
Hàm h(x) được gọi là một hàm băm (theo nghĩa không hạn chế trong phạm vi mật
mã học) nếu nó thỏa mãn hai tính chất sau:
Tính nén (compression): Hàm h(x) tương ứng chuỗi bit đầu vào x có chiều dài
hữu hạn tùy ý vào chuỗi bit y = h(x) có chiều dài cố định n > 0 cho trước (thường là không lớn)
Dễ tính toán (ease of computation): Với mọi chuỗi bit đầu vào x có chiều dài
hữu hạn tùy ý, h(x) được tính toán “dễ dàng”
Các hàm băm dùng trong mật mã còn phải thỏa mãn thêm một số tính chất quan
trọng khác mà ta trình bày dưới đây
3.2 Một số tính chất cơ bản của hàm băm mật mã:
(1) Tính kháng tiền ảnh (preimage resistant): Với mọi đầu ra y cho trước, không thể tính toán để tìm được bất kỳ dữ liệu đầu vào xnào sao cho giá trị băm h (x) của nó bằng giá trị đầu ra y đã cho;
(2) Tính kháng tiền ảnh thứ hai (2nd-preimage resistant): Với mọi dữ liệu đầu vào x1
cho trước, không thể tính toán để tìm ra được bất kỳ một đầu vào x2 nào (x2 x1) mà giá trị băm h(x2) của nó bằng với giá trị băm h(x1) của x1;
(3) Tính kháng xung đột (collision resistant): 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 (tức là h(x1)h(x2))
3.3 Định nghĩa các hàm băm:
Hàm băm một chiều (one-way hash functions – OWHFs) là hàm băm thỏa mãn
các tính chất (1) và (2)
Trang 36 Hàm băm kháng xung đột (collision resistant hash functions – CRHFs) là hàm
băm thỏa mãn các tính chất (1) và (3)
4 Cấu trúc cơ bản của các thuật toán băm:
Trước tiên, 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à x1, x2,…, xm Tuy nhiên, do chiều dài khối dữ liệu ban đầu x là tùy ý, do đó, ta có thể 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 xsau khi thêm vào sẽ là bội số của r Ngoài ra, khối bit phụ 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 dữ liệu khi chưa thêm các bit phụ Sau đó, ta lần lượt
“cắt” từng khối con r bit từ khối mở rộng x Mỗi khối con r bit xi lần lượt từng bước đi 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 là một chuỗi bit có chiều dài cố định n>0 Nếu ký hiệu IV là giá trị khởi tạo ban đầu cho H0, thì quá trình lặp xử lý dãy các khối con x1,
x2,…, xm được mô tả như sau:
IV
H0 ;
),( i1 i
i f H x
H trong đó i1,2, ,m;
h(x) = g(Hm)
Người ta thường gọi Hi (kết quả trung gian sau bước thứ i) là các biến dây chuyền
(chaining variable) Hàm g(x) lấy biến dây chuyền cuối cùng để tạo ra mã băm cầ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(Hm) = Hm Khâu then chốt trong xây dựng hàm băm thường là hàm nén f
Giá trị hàm băm mật mã (mã băm) của một thông điệp (message) thường được gọi là
Mô tả tổng quan về thuật toán:
Thuật toán MD4 nhận dữ liệu đầu vào là một chuỗi bit x có chiều dài b0 tùy ý
và sinh ra mã băm của x có chiều dài cố định 128 bit
Trước tiên, chuỗi bit x được xử lý lại bằng cách thêm r > 0 bit phụ vào x sao cho chiều dài của chuỗi bit mới bbr là bội số của 512 Sau đó ta chia chuỗi bit mới này thành m khối, mỗi khối có chiều dài đúng bằng 512 bit (tức là b512m) Mỗi khối bit này
được chia thành một dãy gồm 16 từ (word), mỗi từ có 32 bit Thuật toán MD4 tuần tự xử lý
dãy m khối trong m lượt tính toán Dữ liệu đầu vào tại lượt tính toán thứ k (1km) là khối thứ k trong dãy và mã băm nhận được sau (k – 1) lượt tính toán trước đó (mã băm đầu vào ứng với bước k – 1 được khởi tạo từ trước) Tại lượt tính toán thứ k này, khối dữ liệu đầu vào
512 bit (xem như là dãy gồm 16 từ) liên tiếp đi qua 3 vòng tính toán, trong mỗi vòng gồm có
16 bước, mỗi bước thực hiện tính toán với dữ liệu là một từ trong dãy và các kết quả nhận được sau bước trước Kết quả sau khi qua 3 vòng tính toán trên sẽ được kết hợp với mã băm trước đó để sinh ra mã băm mới (cho lượt tính toán thứ k) Sau khi đã xử lý hết m khối, mã băm nhận được sau cùng là kết quả ta cần tìm
Trang 37Trong quá trình tính toán, MD4 sử dụng 4 từ 32 bit: H1, H2, H3, H4, gọi là các biến
dây chuyền, để lưu trữ mã băm tạm thời tại mỗi lượt tính toán
Định nghĩa các ký hiệu và các hằng số:
Thuật toán MD4 sử dụng các hàm sau đây:
)(
)(),,(x y z x y x z
F ,
)()()(),,
)(
),,(x y z x y z
Khởi tạo mảng thứ tự truy xuất của các từ 32 bit:
z[1 16] = [0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15], z[17 32] = [0;4;8;12;1;5;9;13;2;6;10;14;3;7;11;15],
z[33 48] = [0;8;4;12;2;10;6;14;1;9;5;13;3;11;7;15],
Định nghĩa số vị trí bit xoay trái cho mỗi bước:
s[1 16] = [3;7;11;19;3;7;11;19;3;7;11;19;3;7;11;19], s[17 32] = [3;5;9;13;3;5;9;13;3;5;9;13;3;5;9;13],
s[33 48] = [3;9;11;15;3;9;11;15;3;9;11;15;3;9;11;15],
Chuẩn bị tính toán:
Ngoài chuỗi bit dữ liệu làm đầu vào cho hàm băm, ta cần thêm thông tin về chiều
dài chuỗi bit đó Ta làm điều này bằng cách thêm vào chuỗi bit dữ liệu 64 bit chứa giá trị là
chiều dài ban đầu của chuỗi bit đầu vào Ngoài ra, ta cần phải định dạng chuỗi bit đầu vào
thành các khối 512 bit, thuật toán sẽ thực hiện xử lý tuần tự dãy các khối 512 bit đó Vì chuỗi
bit dữ liệu ban đầu có chiều dài tùy ý, do đó ta cần thêm vào một số bit phụ sao cho chiều dài
cuối cùng của chuỗi bit đầu vào là bội số của 512
Trang 38Ghép nối 4 từ 32 bit H1, H2, H3, H4 lại thành một chuỗi bit H = H1H2H3H4 ta được
chuỗi bit có chiều dài đúng bằng 128 bit Đây là kết quả cuối cùng của thuật toán
5.2 Hàm băm SHA-1:
Mô tả tổng quan về thuật toán:
SHA-1 do viện Tiêu chuẩn và Công nghệ Hoa Kỳ (NIST – National Institute for Standards and Technology) đề xuất và hiện đang được sử dụng rộng rãi Thuật toán SHA-1
tạo ra chuỗi mã băm có chiều dài cố định 160 bit từ chuỗi bit dữ liệu đầu vào x có chiều dài
tùy ý Ngoài những đặc điểm cơ bản về cấu trúc, so với MD4, SHA-1 có những điểm khác biệt cơ bản sau:
Chiều dài mã băm là 160 bit thay vì 128 bit như trong MD4 (do đó, thuật
toán cần 5 biến trung gian 32 bit lưu giá trị mã băm)
Hàm nén gồm có 4 vòng tính toán (trong MD4 chỉ có 3 vòng) Vòng thứ
nhất sử dụng hàm F, vòng thứ hai sử dụng hàm H, vòng thứ ba sử dụng hàm G và vòng thứ tư
lại sử dụng hàm H Các hàm F, H, G định nghĩa giống như trong thuật toán MD4
Trong hàm nén, khối 16 từ (32 bit) dữ liệu đầu vào được mở rộng thành dãy
80 từ 32 bit, trong đó, 16 từ đầu tiên trong dãy được giữ nguyên như khối 16 từ ban đầu, sau
đó mỗi từ (trong 64 từ) tiếp theo được tạo ra bằng cách lấy 4 từ ngay trước nó đem trộn
(XOR) với nhau Tất cả 80 từ tạo ra được phân đều cho 4 vòng, mỗi vòng gồm 20 bước tính toán (MD4 chỉ có 3 vòng tính toán, mỗi vòng chỉ gồm 16 bước tính)
Trang 40}
(H1,H2,H3,H4,H5) (H1 + A,H2 + B,H3 + C,H4 + D,H5 + E)
Kết thúc tính toán:
Ghép nối 5 từ 32 bit H1, H2, H3, H4, H5 lại thành một chuỗi bit H = H1H2H3H4H5
ta được chuỗi bit có chiều dài đúng bằng 160 bit Đây là kết quả cuối cùng của thuật toán
V Chữ ký số sử dụng mật mã khóa công khai:
1 Chữ ký số là gì?
Điều đầu tiên cần phân biệt rõ ràng hai khái niệm chữ ký điện tử (electronic signature)
và chữ ký số (digital signature) Trên môi trường mạng, bất cứ dạng thông tin nào được sử
dụng để nhận biết một con người đều được coi là chữ ký điện tử Ví dụ, một đoạn text, âm thanh hoặc hình ảnh được chèn vào cuối e-mail, đó cũng là chữ ký điện tử
Chữ ký số là một dạng chữ ký điện tử, an toàn nhất và cũng được sử dụng rộng rãi
nhất Chữ ký này hình thành dựa trên kỹ thuật mã khoá công khai (PKI), theo đó mỗi người
sử dụng cần có một cặp khóa bao gồm khóa bí mật và công khai Người chủ chữ ký sử dụng khoá bí mật để tạo chữ ký số (trên cơ sở kết hợp với nội dung thông điệp dữ liệu), ghép nó với thông điệp dữ liệu và gửi đi Người nhận dùng mã công khai giải mã chữ ký số để biết được
người đó là ai Tất cả quy trình ký và giải mã chữ ký số đều được thực hiện bằng phần mềm
Điểm quan trọng là các cặp khóa trên do những nhà cung cấp dịch vụ chứng thực chữ
ký số (CA) cấp (hoặc xác minh là đủ điều kiện an toàn) sau khi đã kiểm tra, xác minh chủ của
nó (cá nhân, tổ chức) là có thực Đồng thời, nhà cung cấp dịch vụ cũng giao cho cá nhân, tổ chức đó một chứng thư số - tương đương như chứng minh thư nhân dân hay giấy xác nhận sự tồn tại của cơ quan, tổ chức trên môi trường mạng Chứng thư đó có chứa khóa công khai của
tổ chức, cá nhân và được duy trì tin cậy trên cơ sở dữ liệu của nhà cung cấp dịch vụ chứng thực, do vậy người nhận có thể truy cập vào cơ sở dữ liệu đó để xác minh xem đúng là có người đó hay không
2 Phương pháp ký điện tử và xác nhận chủ thể:
Trong đời sống thường ngày, chữ ký (viết tay) trên một văn bản là một minh chứng về
“bản quyền” hoặc ít nhất cũng là sự “tán đồng, thừa nhận” các nội dung trong văn bản Những yếu tố nào làm nên “sức thuyết phục” của nó? 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 thị
là người đã ký văn bản
Chữ ký thông thể “tái sử dụng”, tức là nó là 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 không thể tạo ra chữ ký đó) Tuy nhiên, trong cuộc sống mọi cái không diễn ra theo đúng như mô hình “lý tưởng” nêu trên, nhưng với khả năng kiểm định sát sao thì việc làm khác đi không phải là dễ Chúng
ta có lý do để mang mô hình này vào “thế giới máy tính” với sự hỗ trợ của công nghệ mã hóa
Một chữ ký số là một phương pháp toán học chính xác để gắn liền định danh của một ai
đó với một thông điệp Nó khó giả mạo hơn chữ ký tay, và thông điệp được ký không thể sửa đổi mà không làm mất hiệu lực của chữ ký