1. Trang chủ
  2. » Công Nghệ Thông Tin

Sử dụng chữ ký điện tử để xác thực trong quản lý công văn đi đến

93 312 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 93
Dung lượng 2,11 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các hệ thống mã hoá trong máy tính phổ biến nhất thuộc một trong hai loại sau: * Mã hoá với khoá đối xứng Symmetric-key Encryption * Mã hoá với khoá công khai Public-key Encryption Hệ

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

-

Đặng Ngọc Minh

SỬ DỤNG CHỮ KÝ ĐIỆN TỬ ĐỂ XÁC THỰC TRONG

QUẢN LÝ CÔNG VĂN ĐI ĐẾN

Chuyên ngành : Công nghệ thông tin

Trang 2

LỜI CAM ĐOAN

Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi

Các số liệu, kết quả nêu trong luận văn là trung thực dựa trên các công trình nghiên cứu của riêng tôi, không sao chép bất kỳ kết quả nghiên cứu nào của các tác giả khác Nội dung của luận văn có tham khảo và sử dụng một số thông tin, tài liệu

từ các nguồn sách, tạp chí được liệt kê trong danh mục các tài liệu tham khảo

Hà Nội, ngày 6 tháng 9 năm 2014

Tác giả

Đặng Ngọc Minh

Trang 3

MỤC LỤC

Chương I - Mở đầu 1

1 Lí do chọn đề tài 1

2 Các vấn đề cần nghiên cứu 2

2.1 Mục đích nghiên cứu 2

2.2 Nhiệm vụ nghiên cứu 2

2.3 Đối tượng nghiên cứu 2

2.4 Phạm vi nghiên cứu 3

2.5 Phương pháp nghiên cứu 3

3 Bố cục luận văn 3

Chương II – Tổng quan về mật mã, hàm băm và chữ ký điện tử 5

1 Lý thuyết mật mã và mã hóa 5

1.1 Giới thiệu 5

1.3 Phân loại 6

2 Tổng quan về chữ ký điện tử và chữ ký số 8

2.1 Giới thiệu chung về chữ ký điện tử 8

2.2 Khái niệm chữ ký số và chữ ký điện tử 9

2.3 Phân loại 9

2.4 Quy trình sử dụng 10

2.5 Sơ đồ tổng quan của một hệ thống chữ ký số điện tử 11

3 Hàm băm 11

3.1 Sơ lược về hàm băm 11

3.2 Lý do sử dụng hàm băm trong chữ ký điện tử 12

3.3 Hàm băm SHA-1 14

4 Hạ tầng khóa công khai (PKI) 16

4.1 Khái niệm 16

4.2 Cấu trúc và vai trò của PKI trong chương trình 17

4.3 Chứng chỉ số X.509 18

4.4 Tạo khóa cho chứng chỉ số 20

5 Ký số RSA 27

5.1 Giới thiệu sơ lược RSA 27

Trang 4

5.2 Giải thuật RSA 27

5.3 Tính bảo mật của RSA 30

5.4 Các dạng tấn công 31

5.5 Một số phương thức mã hóa nâng cao 33

5.6 Ký và mã hóa bằng PKCS#1 v1.5 34

Chương III - Xây dựng và cài đặt chương trình quản lý văn bản điện tử sử dụng sơ đồ ký số RSA kết hợp hàm băm SHA 41

1 Xây dựng bài toán 41

2 Thiết kế chương trình 43

2.1 Phân tích các yêu cầu và các yếu tố an ninh cần bảo mật 43

2.2 Xây dựng các chức năng chính của chương trình 48

2.3 Ký số bằng phương pháp RSA khi phê duyệt văn bản 54

3 Lựa chọn công cụ 57

4 Cài đặt 57

4.1 Mô tả cài đặt 57

4.2 Chạy thử nghiệm chương trình 74

4.3 Đánh giá kết quả 83

Chương IV - Kết luận 84

Trang 5

Danh mục từ viết tắt:

- RSA: Rivest Shamir Adleman

- SHA: Secure Hash Algorithm

- MD: Message Digest

- CKĐT: Chữ ký điện tử

- CA: Certificate Authority

- UCLN: Ước chung lớn nhất

- CRT: Chinese Remainder Theorem

- PKCS: Public Key Cryptography Standards

- OAEP: Optimal Asymmetric Encryption Padding

- ANSI: American National Standards Institute

- ISO: International Organization for Standardization

- IEC: International Electrotechnical Commission

- Pfx: Personal Information Exchange

- Cer: Certificate

- PKI: Public Key Infastructure

Trang 6

Danh mục các hình vẽ:

Hình II.1.3.1 – Sơ đồ hoạt động của mã hóa đối xứng

Hình II.1.3.2- Sơ đồ hoạt động của mã hóa bất đối xứng

Hình II.3.1 – Hoạt động của hàm băm

Hình II.3.2.2 – Các thông điệp khác nhau qua các thuật tóa mã hóa tọa thành bản mã giống nhau

Hình II.5.2 - Sơ đồ ký số RSA

Hình III.1 – Mô hình client – server

Hình III.3.2 – Các thao tác xử lý với văn bản

Hình III.2.1 – Biểu đồ Use Case của người quản trị

Hình III.2.2.2 (1) – Biểu đồ Use Case của người dùng

Hình III.2.2.2 (2) – Các thành phần cơ bản của một văn bản số

Hình III.2.2.2 (3) – Biểu đồ trình tự quản lý văn bản

Hình III.2.2.2 (4) – Ví dụ luồng văn bản

Hình III.2.3 (1) - Sơ đồ quá trình ký vào tài liệu điện tử dùng khóa bí mật

Hình III.2.3 (2) - Sơ đồ quá trình xác thực điện tử dùng khóa công khai

Hình III.4.1.2 – Hình ảnh minh họa một USB Key

Trang 7

Chương I - Mở đầu

1 Lí do chọn đề tài

Nhu cầu về bảo đảm an toàn lưu trữ và truyền đạt thông tin đã xuất hiện từ rất sớm, khi con người biết trao đổi và truyền đưa thông tin cho nhau, đặc biệt khi các thông tin đó đã được thể hiện dưới hình thức ngôn ngữ, thư từ Trải qua hàng nghìn năm lịch sử, mật mã đã được sử dụng rộng rãi trên khắp thế giới từ Đông sang Tây

để giữ bí mật cho việc giao lưu thông tin trong nhiều lĩnh vực hoạt động giữa con người và các quốc gia, đặc biệt trong các lĩnh vực quân sự, chính trị, ngoại giao Mật

mã trước hết là một loại hoạt động thực tiễn, nội dung chính của nó là để giữ bí mật

thông tin (chẳng hạn dưới dạng một văn bản)

Ngày nay, khi các ứng dụng của công nghệ thông tin ngày càng không thể thiếu được đối với các thành phần như xã hội, kinh tế, chính trị, quân sự Đặc biệt hiện nay nhu cầu thay thế các văn bản giấy tờ thông thường nhằm tiết kiệm tài nguyên

và công sức cho công tác lưu trữ trong cơ quan, tất cả mọi thông tin liên quan đều do máy vi tính quản lý và truyền gửi đi trên hệ thống mạng, kéo theo đó là vấn đề về xác thực nguồn thông tin nhận được Và vấn đề được đặt ra là làm thế nào để xác thực được một cách chính xác nguồn thông tin nhận là của một người, một máy chủ hay

của một thực thể nào đó gửi tin trên hệ thống mạng?

Cơ sở của giải pháp cho bài toán kể trên là các phương pháp mật mã, đặc biệt

là mật mã khóa công khai

Đề tài “SỬ DỤNG CHỮ KÝ ĐIỆN TỬ TRONG QUẢN LÝ CÔNG VĂN

ĐI ĐẾN” sẽ tìm hiểu vấn đề nêu trên và cài đặt chương trình ký số minh họa

Bài luận văn này tôi chủ yếu tập trung trình bày về việc xây dựng hệ thống quản lý văn bản số và ứng dụng hệ thống chữ ký số cho việc bảo mật thông tin trong mạng hệ thống bằng ứng dụng hệ mã hóa RSA Bài luận văn gồm có ba phần: 1 Tìm hiểu về mật mã, mã hóa, hàm băm và chữ ký số, 2 Xây dựng chương trình quản lý

Trang 8

văn bản số kết hợp chữ ký số RSA, 3 Cài đặt chương trình Phần cuối cùng là kết luận và tài liệu tham khảo

Mặc dù đã cố gắng hết sức, nhưng vẫn không sao tránh khỏi sai sót, vì vậy rất mong nhận được sự góp ý phê bình của các thầy cô

2 Các vấn đề cần nghiên cứu

2.1 Mục đích nghiên cứu

Tìm hiểu cơ sở lý thuyết của mã hóa và giải mã, chữ ký điện tử

Tìm hiểu các chức năng và yêu cầu cần thiết cho một hệ thống quản lý thông tin đi đến

Cài đặt chương trình ký số kết hợp RSA và hàm Băm

2.2 Nhiệm vụ nghiên cứu

- Nghiên cứu cơ sở lý luận về chứng thực thông tin

- Tìm hiểu về chữ ký điện tử

- Tìm hiểu về các phương thức mã hóa dữ liệu cơ bản

- Tìm hiểu phương thức mã hóa bất đối xứng sử dụng cho chữ ký điển tử

- Tìm hiểu về hàm băm

- Cài đặt chương trình minh họa

2.3 Đối tượng nghiên cứu

- Lý thuyết mật mã và mã hóa

- Hàm băm kết hợp cho chữ ký điện tử

Trang 9

- Hệ mã hóa công khai RSA

2.4 Phạm vi nghiên cứu

Nghiên cứu nghiệp vụ quản lý văn bản nhà nước, lý thuyết về chứng thực thông tin, hệ mã hóa công khai RSA, hàm băm SHA và cài đặt chương trình minh họa

2.5 Phương pháp nghiên cứu

- Hoạt động nghiên cứu cá nhân, nghiên cứu tài liệu

- Trao đổi với giảng viên hướng dẫn

Trang 10

3 Lựa chọn công cụ

4 Cài đặt

Chương IV – Kết luận

Trang 11

Chương II – Tổng quan về mật mã, hàm băm và chữ ký điện tử

1 Lý thuyết mật mã và mã hóa

1.1 Giới thiệu

Mật mã (Cryptography) là một môn khoa học nghiên cứu cách viết bí mật

Về phương diện lịch sử, mật mã gắn liền với quá trình mã hóa Mã hóa là cách thức

để chuyển đổi thông tin từ dạng này sang dạng khác, từ dạng thông thường có thể nhận thức được thành dạng không thể nhận thức được, làm cho thông tin trở thành dạng không thể đọc được nếu như không có các thông tin bí mật Các sản phẩm của lĩnh vực này là các hệ mã mật, các hàm băm, các hệ chữ ký điện tử, các cơ chế phân phối, quản lý khóa và các giao thức mật mã Quá trình mã hóa chủ yếu được sử dụng

để đảm bảo tính bí mật của các thông tin quan trọng, chẳng hạn trong công tác tình báo, quân sự hay ngoại giao cũng như các bí mật về kinh tế, thương mại Hầu hết các phương pháp mã hoá được dùng hiện nay dựa vào các máy tính, đơn giản là do các

mã do con người sinh ra rất dễ bị phá bởi công cụ máy tính Các hệ thống mã hoá trong máy tính phổ biến nhất thuộc một trong hai loại sau:

* Mã hoá với khoá đối xứng (Symmetric-key Encryption)

* Mã hoá với khoá công khai (Public-key Encryption)

Hệ mật mã hiện đại cần đảm bảo được hai yêu cầu sau:

- Đảm bảo tính bảo mật: Ngăn không để người lạ thực hiện việc trích chọn, sửa đổi thông tin từ các bản mã được gửi trên các kênh truyền phổ biến (thường

không an toàn)

- Đảm bảo tính xác thực: Đảm bảo chỉ có người nhận đúng mới có thể giải

mã nội dung bản mã, đồng thời cũng đảm bảo người gửi không thể phủ nhận nội dung đã gửi

Trang 12

1.3 Phân loại

1.3.1 Mã hóa đối xứng

Các thuật toán khóa đối xứng (symmetric-key algorithms) là một lớp các thuật

toán mật mã hóa trong đó các khóa dùng cho việc mật mã hóa và giải mã có quan hệ

rõ ràng với nhau (có thể dễ dàng tìm được một khóa nếu biết khóa kia)

Cả hai quá trình mã hóa và giải mã của hệ thống mã hóa đối xứng đều sử dụng chung một khóa bí mật Do đó, khi bị mất khóa bí mật này thì tính bảo mật của hệ mã

bị phá vỡ

Ban đầu, bản rõ được người gửi A mã hóa với khóa k Sau đó bản mã được gửi tới người nhận B Khi nhận được bản mã, người B sử dụng khóa k giải mã để thu được bản rõ Do đó, nếu một người khác có được khóa k thì hệ thống mã hóa này sẽ

bị tấn công

Hình II.1.3.1 – Sơ đồ hoạt động của mã hóa đối xứng

Các thuật toán đối xứng nói chung đòi hỏi công suất tính toán ít hơn các thuật toán khóa bất đối xứng Trên thực tế, một thuật toán khóa bất đối xứng có khối lượng tính toán nhiều hơn gấp hằng trăm, hằng ngàn lần một thuật toán khóa đối xứng có chất lượng tương đương

Hạn chế của các thuật toán khóa đối xứng bắt nguồn từ yêu cầu về sự phân hưởng chìa khóa bí mật, mỗi bên phải có một bản sao của chìa Do khả năng các chìa

khóa có thể bị phát hiện bởi đối thủ mật mã, chúng thường phải được bảo an trong

Trang 13

khi phân phối và trong khi dùng Hậu quả của yêu cầu về việc lựa chọn, phân phối và lưu trữ các chìa khóa một cách không có lỗi, không bị mất mát là một việc làm khó khăn, khó có thể đạt được một cách đáng tin cậy

Để đảm bảo giao thông liên lạc an toàn cho tất cả mọi người trong một nhóm

gồm n người, tổng số lượng chìa khóa cần phải có là n(n-1)/2

Các thuật toán khóa đối xứng không thể dùng cho mục đích xác thực hay mục đích chống thoái thác

Hình II.1.3.2- Sơ đồ hoạt động của mã hóa bất đối xứng

Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:

Trang 14

- Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải mã

được

- Tạo chữ ký số: cho phép kiểm tra một văn bản có phải đã được tạo với một

khóa bí mật nào đó hay không

- Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin mật

giữa 2 bên

Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng những lợi điểm mà chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng

2 Tổng quan về chữ ký điện tử và chữ ký số

2.1 Giới thiệu chung về chữ ký điện tử

Trong đời sống hà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 Tuy nhiên trong thế giới máy tính thì vấn đề ký như trong thực tế sẽ gặp phải nhiều khó khăn : các dòng thông tin trên máy tính có thể thay đổi dễ dàng, hình ảnh của chữ ký tay của một người cũng dễ dàng cho “sang – truyền” từ một văn bản này sang một văn bản khác, và việc thay đổi nội dung một văn bản điện tử (sau khi ký) cũng chẳng để lại dấu vết gì về phương diện “tẩy, xóa”… Do đó, giao thức “ký trong thế giới điện tử “ cần phải có sự hỗ trợ của công nghệ mã hóa Sơ đồ chữ ký điện tử

là phương pháp ký một thông báo được lưu dưới dạng điện tử Giao thức cơ bản của chữ ký số dựa trên ý tưởng của Diffie và Hellman:

- Người gửi (chủ nhân của văn bản) ký văn bản bằng cách mã hóa nó với khóa

bí mật của mình

- Người gửi chuyển văn bản đã ký cho người nhận

Trang 15

- Người nhận văn bản kiểm tra chữ ký bằng việc sử dụng chìa khóa công khai của người gửi để giải mã văn bản

Một chữ ký số “lý tưởng” cần phải đáp ứng được các yêu cầu đặc điểm:

- Tính xác nhận: một chữ ký điện tử đảm bảo rằng chính người ký là người tạo

ra nó

- Tính an toàn: không thể làm giả chữ ký nếu như không biết thông tin bí mật

để tạo chữ ký

- Không thể dùng lại: một chữ ký điện tử không thể dùng cho một tài liệu khác

- Không thể phủ nhận: một khi người ký không thể phủ nhận chữ ký đó

- Tính hiệu quả: ký và xác nhận nhanh chóng dễ dàng

2.2 Khái niệm chữ ký số và chữ ký điện tử

Chữ ký điện tử (tiếng Anh: electronic signature) là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, video ) nhằm mục đích xác định người chủ của dữ liệu đó Chữ ký số (khóa công khai) (digital signature) 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ý

2.3 Phân loại

Chúng ta có thể chia chữ ký số ra 2 loại: Kỹ thuật ký mà chữ ký số là một phần đính vào thông điệp gửi đi, cả 2 đều là đầu vào cho quá trình xác minh tính đúng đắn của chữ ký và loại chữ ký mà từ nó có thể phục hồi lại thông điệp ban đầu trước khi

ký, thông điệp ban đầu này không phải là đầu vào cho quá trình xác minh chữ ký

Trang 16

Luận văn này tôi chủ yếu tập trung vào kỹ thuật ký thứ 1, chữ ký số được sử dụng như một phần đính kèm thêm cho quá trình xác minh thông điệp Những đặc điểm cơ bản của chữ ký này là :

- Chữ ký điện tử đi kèm với thông điệp gốc

- Cần có thông điệp (gốc) cho quá trình kiểm tra chữ ký điện tử

ra công cộng để bất kỳ ai cũng có thể biết Nguyên tắc của hệ thống mã hóa khóa công khai đó là, nếu mã hóa bằng khóa bí mật thì chỉ khóa công khai mới giải mã đúng thông tin được, và ngược lại, nếu mã hóa bằng khóa công khai, thì chỉ có khóa

bí mật mới giải mã đúng được

Ngoài ra, chữ ký còn đảm bảo phát giác được bất kỳ sự thay đổi nào trên dữ

liệu đã được “ký” Để ký lên một văn bản, phần mềm ký sẽ nghiền (crunch down) dữ

liệu để gói gọn bằng một vài dòng, được gọi là thông báo tóm tắt, bằng một tiến trình

được gọi là “kỹ thuật băm”, rồi tạo thành chữ ký điện tử Cuối cùng, phần mềm ký

tên sẽ gắn chữ ký điện tử này vào văn bản

Trang 17

2.5 Sơ đồ tổng quan của một hệ thống chữ ký số điện tử

Một sơ đồ chữ ký số thường bao gồm hai thành phần chủ chốt là thuật toán ký

và thuật toán xác minh Một sơ đồ chữ ký số là một bộ 5 (P, A, K, S, V) thỏa mãn các điều kiện sau:

- P là một tập hợp các bản rõ có thể

- A là tập hữu hạn các chữ ký có thể

- K là tập hữu hạn các khóa có thể

- S là tập các thuật toán ký

- V là tập các thuật toán xác minh

Với mỗi k thuộc K, tồn tại một thuật toán ký sigk thuộc S và một thuật toán xác minh verk thuộc V, trong đó sigk và verk là các ánh xạ : sigk là một ánh xạ từ P sang

A và Verk là một ánh xạ từ A sang tập biểu diễn {True, False} thỏa mãn với mọi x thuộc P, y thuộc A,ver (x,y)= true nếu y=sig(x) và ver(x,y) = false nếu y khác sig(x) Với mỗi k thuộc K, hàm sigk và verk là các hàm thời gian đa thức, verk là hàm công khai còn sigk là hàm mật

Khi một người dùng muốn ký lên một thông báo x thì người đó dùng thuật toán

an toàn để tạo ra chữ ký y=sig(x) nhận được và gửi cho người nhận Người nhận nhận được chữ ký sig(x) thì dùng thuật toán xác minh ver(x,y) để xác định tính đúng đắn của chữ ký số (trả về true hoặc false)

3 Hàm băm

3.1 Sơ lược về hàm băm

Hàm băm (hash function) là một giải thụât nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ liệu Giá trị băm đóng vai trò gần như một khóa để phân biệt các khối dữ liệu

Trang 18

Hàm băm là các thuật toán không sử dụng khóa để mã hóa (ở đây ta dùng thuật ngữ “băm” thay cho “mã hóa”), nó có nhiệm vụ “lọc” (băm) thông điệp được đưa

vào theo một thuật toán h một chiều nào đó, rồi đưa ra một bản băm gọi là văn bản

đại diện có kích thước cố định Do đó người nhận không biết được nội dung hay độ

dài ban đầu của thông điệp đã được băm bằng hàm băm

Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội dung thông điệp từ giá trị băm này

Một hàm băm để được xem là bảo mật và an toàn phải đảm bảo các tính chất:

- Có thể áp dụng với thông báo đầu vào có độ dài bất kỳ

- Tạo ra giá trị băm y = h(x) có độ dài cố định

- h(x) dễ dàng tính được với bất kỳ x nào

- Tính một chiều : Với mọi đầu ra y cho trước không thể tìm được x’ sao cho h(x’) bằng giá trị y cho trước

3.2 Lý do sử dụng hàm băm trong chữ ký điện tử

Trang 19

Hình II.3.2 – Các thông điệp khác nhau qua các thuật toán mã hóa tọa thành bản mã

giống nhau

Các sơ đồ ký số thường chỉ được sử dụng để ký các bức thông điệp có kích thước nhỏ và sau khi ký, bản ký số có kích thước lớn hơn bản thông điệp gốc (gấp đôi) Trên thực tế, ta cần phải ký các văn bản có kích thước lớn lên đến hàng Megabytes, sau đó ta phải gửi kèm cả chữ ký số lẫn đoạn thông điệp gốc để xác nhận, điều này làm cho dung lượng thông tin truyền qua mạng trở nên rất lớn Một cách để giải quyết vấn đề trên là chặt thông điệp thành nhiều đoạn 160 bit, sau đó ký lên các đoạn đó độc lập nhau Nhưng sử dụng biện pháp này lại tạo ra một số vấn đề khác của chữ ký số:

- Không giải quyết được vấn đề kích thước truyền lớn

- Các chữ ký “an toàn” thì tốc độ chậm vì chúng dùng nhiều phép tính số học modulo

- Sau khi ký, nội dung của thông điệp có thể bị xáo trộn các đoạn với nhau, hoặc một số đoạn có thể bị mất mát, không đảm bảo tính toàn vẹn của thông điệp

Giả pháp cho vấn đề vướng mắc trên là dùng hàm băm để trợ giúp cho việc ký số:

- Hàm băm tạo ra một đoạn chuỗi băm có độ dài duy nhất, giúp giảm kích thước cần tính toán → giảm cả thời gian thực hiện và dung lượng truyền

- Tăng tính bảo mật cho chương trình, mỗi đoạn văn bản chỉ có thể tạo ra một chuỗi băm duy nhất không trùng lặp

- Tránh sự trùng lặp thông điệp (tuy hiếm xảy ra) khi ký trên các đoạn văn bản khác nhau

Ngoài ra, các phương pháp ký hiện đại được nâng cao từ RSA tùy theo các phương pháp băm được sử dụng để thêm vào các ký tự đặc biệc hoặc các chuỗi ngẫu nhiên vào chuỗi mã hóa khi ký để tăng thêm tính bảo mật

Trang 20

Hiện nay do sự phát triển của máy tính khiến cho người ta phải phát triển các phương pháp băm SHA với độ dài lớn hơn nhưng SHA-1 vẫn là hàm băm được ưa chuộng trong các chương trình phổ thông nhờ tốc độ xử lý tốt mà vẫn đảm bảo tính bảo mật

3.3.2 Thuật toán:

Đầu vào: chuỗi có độ dài tối đa 264 bits

Đầu ra: giá trị băm có độ dài 160 bits

Bước 1: nhồi thêm dữ liệu

Thông điệp được nhồi thêm các bits sao cho độ dài l ≡ 448 mod 512 hay l = n *

512 + 448 (n, l nguyên)

Bước 2: thêm vào độ dài

Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64 bit và được thêm vào cuối chuỗi nhị phân kết quả của bước 1

Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512

Bước 3: khởi tạo bộ đệm MD (MD buffer)

Trang 21

Một bộ đệm 160 bit được dùng lưu trữ các giá trị băm trung gian và kết quả Bộ đệm được biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi tạo ở dạng bigiendian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất.

Bước 4: xử lý các khối dữ liệu 512 bit

Trọng tâm của giải thuật bao gồm 4 vòng lặp thực hiện tất cả 80 bước Mỗi vòng

có đầu vào gồm khối 512 bit hiện thời và một bộ đệm 160 bit ABCDE Các thao tác sẽ cập nhật giá trị bộ đệm

Mỗi bước sử dụng một hằng số Kt (0 ≤ t ≤ 79)

Trang 22

Kt = 5A827999 (0 ≤ t ≤19)

Kt = 6ED9EBA1 (20≤t≤39)

Kt = 8F1BBCDC (40 ≤ t ≤ 59)

Kt = CA62C1D6 (60 ≤ t ≤ 79)

Đầu ra của 4 vòng (bước 80) được cộng với đầu ra của bước CVq để tạo ra CVq+1.

Bước 5: xuất kết quả

Sau khi thao tác trên toàn bộ L blocks Kết quả của khối thứ L là bảng băm 160 bit

4 Hạ tầng khóa công khai (PKI)

4.1 Khái niệm

PKI (Public Key Infrastructure): hạ tầng cơ sở khóa công khai là một cơ chế

để cho một bên thứ 3 (thường là nhà cung cấp chứng thực số) cung cấp và xác thực định danh các bên tham gia vào quá trình trao đổi thông tin Cơ chế này cũng cho phép gán cho mỗi người sử dụng trong hệ thống một cặp khóa công khai/khóa bí mật Các quá trình này thường được thực hiện bởi một phần mềm đặt tại trung tâm và các phần mềm phối hợp khác đặt tại địa điểm của người dùng Khóa công khai thường được phân phối trong chứng thực khóa công khai

Khái niệm hạ tầng khóa công khai (PKI) thường được dùng để chỉ toàn bộ hệ thống bao gồm nhà cung cấp chứng thực số (Certificate authority) cùng các cơ chế liên quan đồng thời với toàn bộ việc sử dụng các thuật toán mã hóa công khai trong trao đổi thông tin

PKI bản chất là một hệ thống công nghệ vừa mang tính tiêu chuẩn, vừa mang tính ứng dụng được sử dụng để khởi tạo, lưu trữ và quản lý các chứng thực điện tử (digital certificate) cũng như các mã khóa công khai và khóa riêng

Trang 23

4.2 Cấu trúc và vai trò của PKI trong chương trình

Một trong những khó khăn của hệ thống khóa bất đối xứng là làm sao đảm bảo được khóa công khai mà người nhận dùng để chứng thực chính xác là khóa công khai nhận được từ đối tác Đó chính là lý do ra đời của PKI như một bên trung gian để kiểm tra cũng như cung cấp các thông tin về người sở hữu khóa cho người cần chứng thực khi cần thiết Trong khóa luận này tôi không đi sâu tìm hiểu về PKI cũng như cách xây dựng một hệ thống hạ tầng khóa công khai phức tạp và chi tiết mà chỉ sử dụng chứng thư của nó như một tập tin thay thế đại diện cho khóa bí mật và khóa công khai trong chương trình Do đó tôi xây dựng như một PKI ở mức sơ khai với các chức năng cơ bản: tạo khóa, cấp phát, chứng thực, kiểm tra khi người dùng ở client sử dụng các chứng chỉ số nhằm mục đích tìm hiểu các chức năng cơ bản của

nó để có thể kết hợp với các nhà cung cấp dịch vụ chứng thư số chuyên nghiệp và bảo mật cao hơn trong trường hợp muốn nở rộng chương trình sau này

Với những yêu cầu về một hệ thống PKI như trên chúng ta phải thiết kế các chức năng của chương trình cho 2 đối tượng :

Server :

 Cho phép người dùng trong hệ thống đăng ký khóa công khai Cấp phát

1 chứng thực số (certificat) cho người dùng đó nếu khóa công khai hợp lệ

 Quản lý khóa công khai, Thu hồi/cấp phát lại chứng thực số

 Cho phép bên thứ 3 kiểm tra tính đúng đắn của 1 chứng thực số bất kỳ

 Cấp phát và bảo mật Khóa riêng và khóa công khai của CA

User :

 Hệ thống PKI cấp phát một khóa công khai cho user và khóa bí mật (Khóa riêng) do PKI client cấp phát và user phải giữ bí mật

 Tạo chữ ký số cho từng văn bản ngẫu nhiên

 Mã hóa và giải mã bằng CA được cấp phát

Mô hình được sử dụng là mô hình phân cấp CA đơn tầng, với chỉ một CA được xác định làm root CA cùng toàn bộ khóa sinh ra từ nó đều nằm tập trung trên

Trang 24

một máy tính và cũng chính là máy chủ của chương trình Root CA không bị tách rời khỏi mạng mà nó sẽ là một máy chủ thành viên của domain và luôn hiện diện trên mạng để cấp chứng chỉ theo yêu cầu của các máy tính, người dùng, dịch vụ hay thiết

bị mạng

Trong mô hình này, mỗi thực thể sẽ giữ bản sao khoá công khai của root CA

và kiểm tra đường dẫn của chứng thư bắt đầu từ chữ ký của CA gốc Đây là mô hình PKI tin cậy sớm nhất

4.3 Chứng chỉ số X.509

a Giới thiệu

Chứng chỉ số là một tập tin giúp chắc chắn rằng khóa công khai thuộc về một thực thể nào đó như người dùng, tổ chức, máy tính và điều này được xác minh bởi một bên thứ ba đáng tin cậy thường gọi là CA (Certificate Authorities) Chứng chỉ số chứa các thông tin nhận dạng về thực thể như tên, địa chỉ, khóa công khai (cùng nhiều thông tin khác) và được ký số bởi khóa bí mật của CA

Chứng chỉ số là thành phần làm nền tảng cho hoạt động của PKI (hệ thống chứng thư số) Nó là tài liệu điện tử giúp nhận dạng và đại diện cho người dùng, tổ chức, máy tính, thiết bị mạng hoặc dịch vụ nào đó Nó được phát hành bởi một Certification Authority (CA) và được liên kết với một cặp khóa công khai và khóa bí

mật

Theo thời gian, RSA Lab đã phát triển và hoàn thiện các chứng chỉ số và các chuẩn mã hóa của nó để tăng tính bảo mật cho phương pháp RSA, các chuẩn và chứng chỉ này đều phải tuân theo các quy định cụ thể về các đối tượng được trừu tượng hóa gọi là ASN.1 (Abstract Syntax Notation One, được định nghĩa trong X.208) và một

bộ quy tắc mã hóa để đại diện cho các ký tự và chuỗi số gọi là BER (Basic Encoding Rules, được định nghĩa trong X.209) Toàn bộ lịch sử các phiên bản chứng chỉ số X Sê-ri có thể xem thêm tại trang web http://www.itu.int/rec/T-REC-X/en

Trang 25

Hiện nay, X.509v3 là phiên bản đang được sử dụng phổ biến nhất

b Cấu tạo chứng chỉ X.509v3

Được ra đời vào năm 1996, định dạng X.509 version 3 được bổ sung thêm các

phần mở rộng (extension) để khắc phục các vấn đề liên quan tới việc so khớp Issuer

Unique ID và Subject Unique ID cũng như là các vấn đề về xác thực chứng chỉ Một chứng chỉ X.509 version 3 có thể chứa một hoặc nhiều extension, như được thể hiện trong hình dưới đây:

Hình II.4.3 – Các thành phần của chứng chỉ số X.509 v3

Trang 26

Mỗi extension trong chứng chỉ X.509 version 3 gồm 3 phần:

Extension Identifier: là một mã nhận dạng đối tượng (Object Identifier –

OID) cho biết kiểu định dạng và các định nghĩa của extension

Criticality Flag: là một dấu hiệu cho biết thông tin trong extension có quan

trọng (critical) hay không Nếu một ứng dụng không thể nhận diện được trạng thái

critical của extension hoặc extension không hề chứa giá trị nào thì chứng chỉ đó không thể được chấp nhận hoặc được sử dụng Nếu mục criticality flag này không được thiết lập thì một có thể sử dụng chứng chỉ ngay cả khi ứng dụng đó không nhận diện được extension

Extension Value: là giá trị được gán cho extension Nó phụ thuộc vào từng

extension cụ thể

Ngoài việc giới thiệu thêm các extension như đã nêu ở trên thì trường

Version của chứng chỉ X.509 version 3 sẽ có giá trị là 3 để cho biết phiên bản của chứng chỉ

Có nhiều dạng file chứng chỉ số dùng định dạng của X.509, trong chương trình này tôi sử dụng 2 dạng file phổ biến là pfx chứa khóa bí mật và cer chứ khóa công khai được cấp phát rộng rãi

4.4 Tạo khóa cho chứng chỉ số

4.4.1 Thuật toán cổ điển

1 Tạo ra hai số nguyên tố lớn ngẫu nhiên, p và q, sao cho tích của chúng n =

pq có độ dài bit được cho trước, ví dụ như 1024 bit

2 Tính n = pq và (phi) φ = (p-1) (q-1)

3 Chọn một số nguyên tố, 1 <e <phi, như vậy gcd (e, phi) = 1

4 Tính số mũ d bí mật, 1 <d <phi, mà ed như ≡ 1 (mod phi)

Trang 27

Ta có khóa công khai là (n, e) và khóa riêng (d, p, q)

n được gọi là mô đun (modulo)

e được gọi là số mũ công khai (public exponent) hoặc số mũ mã hóa (encryption exponent) hoặc chỉ số mũ

d được gọi là số mũ bí mật (secret exponent) hoặc số mũ giải mã (decryption exponent)

4.4.2 Công thức tạo khóa thực tế

Kết hợp những lời khuyên được đưa ra trong các ghi chú dưới đây, một thuật toán thực tế để tạo ra một cặp khóa RSA được đưa ra dưới đây Độ dài bit điển hình

là k = 1024, 2048, 3072, 4096, , với sự gia tăng chi phí tính toán cho các giá trị lớn hơn Bạn sẽ không đi quá xa nếu bạn chọn e là 65.537 (= 0x10001) ở bước (1)

Đầu vào: Yêu cầu một độ dài bit cho modulus, k

Đầu ra: Một cặp RSA key ((N, e), d) trong đó N là mô đun, sản phẩm của hai

số nguyên tố (N = pq) không quá k bit có chiều dài e là số mũ công khai, một số ít hơn và nguyên tố cùng nhau để (p-1) (q-1) và d là số mũ bí mật sao cho ed ≡ 1 (mod (p-1) (q-1))

1 Select a value of e from {3, 5, 17, 257, 65537}

Trang 28

10 d ← modinv(e, L)

return (N, e, d)

Hàm genprime (b) trả về một số nguyên tố có chính xác b bit, với bit thứ b được thiết lập là 1 Lưu ý rằng phép tính k / 2 lấy kết quả là một số nguyên không có phần dư

Nếu chọn e = 65.537 thì khả năng số nguyên đầu tiên được trả lại trong bước (3) và (6) sẽ vượt qua các bài kiểm tra trong các bước (4) và (7), do đó, số vòng lặp cho đến khi vòng lặp kết thúc-rất có thể sẽ chỉ có một lần lặp Giá trị cuối cùng của

N có thể có chiều dài bit hơi ngắn hơn mục tiêu k Điều này thực sự không quan trọng quá nhiều (cung cấp các thông điệp m luôn luôn là <N), nhưng một số chương trình đòi hỏi một mô đun có độ dài chính xác Nếu xảy ra trường hợp đó, bạn chỉ càn lặp lại thuật toán cho đến khi tìm được giá trị chính xác cần tìm

4.4.3 Chú ý trong các ứng dụng thực tế

- Để tạo ra các số nguyên tố p và q, tạo ra một số ngẫu nhiên có độ dài bit k /

2 với k là độ dài bit yêu cầu của mô đun n; thiết lập các bit thấp (điều này đảm bảo số là số lẻ) và thiết lập hai bit cao nhất (điều này đảm bảo rằng các bit cao của n cũng được thiết lập); kiểm tra xem đó là số nguyên tố (sử dụng thử nghiệm Rabin-Miller), nếu không, tăng số lên hai và kiểm tra lại cho đến khi bạn tìm thấy một nguyên tố

Đó là p Lặp lại cho q và bắt đầu với một số nguyên ngẫu nhiên có độ dài k - k / 2 Nếu p < q, giao hoán p và q (điều này chỉ có vấn đề nếu bạn có ý định sử dụng dạng CRT của khóa riêng) Trong trường hợp hiếm có rằng p = q, kiểm tra hàm sinh số ngẫu nhiên của bạn Ngoài ra, thay vì cách tăng 2, chỉ cần tạo ra một số ngẫu nhiên mới mỗi lần

Trang 29

- Trong thực tế, sự lựa chọn phổ biến cho e là 3, 5, 17, 257 và 65.537 (216 +1) Các giá trị cụ thể được lựa chọn bởi vì chúng là số nguyên tố và làm cho hoạt động lũy thừa modulo nhanh hơn, chỉ có hai bit có giá trị 1

Bên cạnh đó: năm con số đó là năm con số Fermat đầu tiên, được gọi là F0 đến

F4, với Hãy cẩn thận, năm con số Fermat đầu tiên là số nguyên tố ("số nguyên tố Fermat"), nhưng số F5 và các số sau đó không phải là số nguyên tố

Ví dụ, F5 = 4294967297 = 641 × 6.700.417

Sự lựa chọn thông thường cho e là F4 = 65.537 = 0x10001 Ngoài ra, số e được chọn phải làm cho đơn giản hơn để kiểm tra xem gcd (e, p-1) = 1 và gcd (e, q-1) = 1 trong khi tạo ra và thử nghiệm các số nguyên tố trong bước 1 Giá trị của p hoặc q mà không kiểm tra này có thể bị từ chối vào lúc đó và sau đó

Hơn thế nữa: Nếu e là một số nguyên tố lẻ thì sẽ giảm được nhiều chi phí khi tính (p mod e) ≠ 1 thay vì tính gcd(p-1,e) = 1

Tại sao vậy? Nếu e là số nguyên tố thì gcd (p-1, e)> 1 khi và chỉ khi p-1 là một bội số của e Có nghĩa là, nếu p - 1 ≡ 0 (mod e) hoặc p ≡ 1 (mod e) Do đó gcd (p-1, e) = 1 ⇔ p mod e ≠ 1

- Để tính giá trị cho d, sử dụng thuật toán Euclide mở rộng để tính toán d =

e-1 mod phi, thay vì viết d = (e-1 / e) mod phi Điều này được gọi là nghịch đảo mô-đun Lưu ý rằng đây không phải là phân chia số nguyên Nghịch đảo mô-đun d được định nghĩa là giá trị số nguyên sao cho ed = 1 mod phi Nó chỉ tồn tại nếu e và phi không

có thừa số chung

- Khi tính số nguyên m đại diện cho văn bản thuần, điều quan trọng là phải thêm các ký tự đệm ngẫu nhiên để làm cho kích thước của số nguyên m lớn và ít nhạy cảm với một số loại tấn công Nếu m = 0 hoặc 1 hoặc n-1thì tính bảo mật rất kém như thể các bản mã có giá trị như nhau Điều quan trọng là để đảm bảo rằng m <n nếu

Trang 30

không thì thuật toán sẽ thất bại Điều này thường được thực hiện bằng cách đảm bảo octet đầu tiên của m bằng 0x00

* Định lý số dư Trung Hoa (RSA WITH CRT)

Một phương pháp thay thế đại diện cho khóa riêng sử dụng định lý số dư Trung Hoa (The Chinese Remainder Theorem-CRT)

Khóa riêng được biểu diễn như là một quintuple-năm thừa số (p, q, dP, DQ,

và qInv), trong đó p và q là số nguyên tố của n, dP và DQ được gọi là số mũ CRT, và qInv là hệ số hình CRT Phương pháp giải mã CRT nhanh hơn tổng thể khoảng 4 lần

so với tính toán m = cd mod n Các giá trị bổ sung cho các khóa riêng là

dP = (1/e) mod (p-1)

dQ = (1/e) mod (q-1)

qInv = (1/q) mod p where p > q

Trong đó ký hiệu (1 / e) có nghĩa là nghịch đảo mô-đun Những giá trị này được tính toán trước và được lưu cùng với p và q như khóa riêng Để tính toán các thông điệp m cho c làm như sau:

Trang 31

* Chú ý: Chris Becke đã chỉ ra rằng hầu hết các gói số nguyên lớn sẽ thất bại khi tính toán h nếu m1 <m2 Điều này có thể dễ dàng sửa được bằng cách tính

* Chiều dài khóa tối thiểu:

Bảng dưới đây được lấy từ khuyến nghị quản lý khóa của NIST 80.057] Nó cho thấy so sánh các kích thước quan trọng được đề nghị cho thuật toán

[NIST-mã hóa đối xứng khối (AES và Triple DES) và thuật toán RSA Đó là, chiều dài chính bạn sẽ cần phải sử dụng để có thể có được mức bảo mật tương đương

Lưu ý như thế nào rất lớn (và không thực tế) mà một một khoá RSA cần có để

có mức bảo mật so sánh với mã hóa AES-192 hoặc AES-256 (mặc dù hai thuật toán này đã có một số điểm yếu tiếp xúc gần đây, AES-128 không bị ảnh hưởng)

* Hiệu năng tính toán

Trang 32

Việc sinh khóa chỉ được thực hiện thường xuyên và tính toán hiệu quả hơn nếu giảm thiểu được một vấn đề

Việc tính a = be mod n được gọi là lũy thừa modulo và phương pháp hiệu quả

để tiến hành việc này trên một máy tính là phương pháp nhị phân trái sang phải

(binary left-to-right method) Để giải quyết y = x^e mod n với e có dạng

Thời gian để tính toán số mũ modulo tăng theo bit được đặt cho số mũ e Để

mã hóa, một sự lựa chọn thích hợp của e có thể làm giảm nỗ lực tính toán cần thiết

để thực hiện các tính toán c = me mod n Lựa chọn phổ biến như 3, 17 và 65.537 là tất cả các số nguyên tố chỉ có hai bit thiết lập: 3 = 0011'B, 17 = 0x11, 65.537 = 0x10001

Số bit trong giải mã số mũ d, tuy nhiên, sẽ không được thuận lợi như vậy và

do đó giải mã bằng cách sử dụng phương pháp tiêu chuẩn của lũy thừa modulo sẽ mất nhiều thời gian hơn so với mã hóa Đừng mắc phải sai lầm cố gắng để xoay sở một giá trị nhỏ cho d, nó không phải là an toàn

Trang 33

5 Ký số RSA

5.1 Giới thiệu sơ lược RSA

Thuật toán mã hoá RSA do ba nhà toán học Ron Rivest, Adi Shamir và Len Adleman tại đại học MIT cùng thực hiện vào năm 1977 và được công bố vào năm

1978 Thuật toán được đặt tên là RSA (Rivest – Shamir – Adleman) được thiết kế theo hệ thống mã công khai

Sự khác biệt giữa một hệ thống mã bí mật với một hệ thống mã công khai là hệ thống mã công khai dùng hai khóa khác nhau để mã hóa và giải mã Do đó, một bộ

mã công khai sẽ bao gồm hai khóa: một khóa giành cho người mã hóa, thường được công khai và khóa còn lại dùng cho người giải mã, thường được giữ bí mật Mặc dù, hai khóa đó thực hiện các thao tác ngược nhau và có liên quan với nhau, nhưng phải làm sao để không thể suy ra khóa bí mật từ khóa công khai

Để thực hiện được ý đồ trên Rivest, Shamir và Adleman đã đề ra một phương pháp dựa trên nhận xét: có thể dễ dàng sinh ra hai nguyên tố lớn và nhân chúng lại với nhau nhưng rất khó khăn khi muốn phân tích thừa số cho tích của chúng

5.2 Giải thuật RSA

Thuật toán RSA có nguồn gốc từ định lý Fermat nhỏ (để phân biệt với định lý Fermat lớn) Định lý này phát biểu rằng nếu p là số nguyên tố thì a^{p-1}\equiv 1

\pmod p với mọi số nguyên a thỏa gcd(a, p) = 1, trong đó gcd (x, y) là hàm tính ước chung lớn nhất của x và y (nói cách khác a và p nguyên tố cùng nhau) Định lý này được Euler tổng quát và phát biểu rằng a^{\phi(n)}\equiv 1 \pmod n với mọi số nguyên n và a thỏa gcd(a, n) = 1, trong đó phi(n) là hàm totient của Euler, được định nghĩa là số các số nguyên dương nhỏ hơn hoặc bằng n và nguyên tố cùng nhau với n

Sự liên quan giữa Fermat với Euler là ở chỗ \phi(p) = p - 1 khi p là số nguyên tố Các bước thực hiện ký số RSA như sau:

Trang 34

Khóa công khai E

Hình II.5.2 - Sơ đồ ký số RSA

* Ký (Mã hóa):

Giả sử có văn bản cần ký M Đầu tiên chuyển M thành một số m<n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thỏa thuận trước

Lúc này ta muốn ký lên văn bản M với số tương ứng là m Ta sẽ tính c là bản

ký của m theo công thức:

C = Sig K (m) = m d mod n ( Trong đó d là khóa bí mật của người cần ký)

Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo môđun) bằng (thuật toán bình phương và nhân) Cuối cùng ta có bản ký c hay bản chữ ký

điện tử và gửi cho đối tác

* Xác nhận (Giải mã)

Sau khi nhận được bản chữ ký điện tử, người nhận cần phải xác nhận chữ ký trên văn bản là đúng người ký bằng cách xác nhận bản ký với khóa công khai của người ký với công thức sau

Ver K (m,c) = TRUE m ≡ c e (mod n) với x, y € Zn

Trang 35

Quá trình giải mã hoạt động vì ta có

Thông thường, chữ ký được kết hợp với hàm mã hoá công khai Giả sử A

muốn gửi một bức điện đã được mã hoá và đã được ký đến cho B Với bản rõ x cho trước, A sẽ tính toán chữ ký của mình y = SigA(m) và sau đó mã hoá cả x và y sử dụng khoá công khai eB của B, kết quả nhận được là z = eB(m, c) Bản mã z sẽ được gửi tới

B, khi B nhận được z, đầu tiên anh ta giải mã với hàm giải mã dB của mình để nhận được (m, c) Sau đó anh ta dùng hàm xác minh công khai của A để kiểm tra xem VerA(m,c) = TRUE hay không

Song nếu đầu tiên A mã hoá m, rồi sau đó mới ký lên bản mã nhận được thì

sao? Khi đó, A sẽ tính:

c = SigA(eB(m))

A sẽ truyền cặp (z, c) tới B, B sẽ giải mã z và nhận được m, sau đó xác minh chữ ký c trên m nhờ dùng VerA Một vấn đề nảy sinh nếu A truyền (m, c) kiểu này thì một người thứ ba C có thể thay chữ ký c của A bằng chữ ký của chính mình

c’ = SigC(eB(m))

Trang 36

5.3 Tính bảo mật của RSA

Bài toán bảo mật của hệ chữ ký RSA là tránh trường hợp người ngoài có thể

tính ra giá trị d bí mật (giá trị ký hay mã hóa) khi biết được giá trị xác nhận e (công khai)

Độ an toàn của hệ thống ký RSA dựa trên 2 vấn đề của toán học: Bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA Nếu 2 bài toán

trên là khó (không tìm được thuật toán hiệu quả để giải chúng) thì không thể thực

hiện được việc phá mã toàn bộ đối với RSA

Bài toán RSA là bài toán tính căn bậc e môđun n (với n là hợp số): Tìm số m

sao cho m e =c mod n, trong đó (e, n) chính là khóa công khai và c là bản mã Hiện nay phương pháp triển vọng nhất giải bài toán này là phân tích n ra thừa số nguyên tố Khi thực hiện được điều này, kẻ tấn công sẽ tìm ra số mũ bí mật d từ khóa công khai

và có thể giải mã theo đúng quy trình của thuật toán Nếu kẻ tấn công tìm được 2 số

nguyên tố p và q sao cho: n = pq thì có thể dễ dàng tìm được giá trị (p-1)(q-1) và qua

đó xác định d từ e Chưa có một phương pháp nào được tìm ra trên máy tính để giải bài toán này trong thời gian đa thức (polynomial-time) Tuy nhiên người ta cũng chưa chứng minh được điều ngược lại (sự không tồn tại của thuật toán)

Tại thời điểm năm 2005, số lớn nhất có thể được phân tích ra thừa số nguyên

tố có độ dài 663 bit với phương pháp phân tán trong khi khóa của RSA có độ dài từ

1024 tới 2048 bit Một số chuyên gia cho rằng khóa 1024 bit có thể sớm bị phá vỡ (cũng có nhiều người phản đối việc này) Với khóa 4096 bit thì hầu như không có

khả năng bị phá vỡ trong tương lai gần Do đó, người ta thường cho rằng RSA đảm

bảo an toàn với điều kiện n được chọn đủ lớn Nếu n có độ dài 256 bit hoặc ngắn hơn,

nó có thể bị phân tích trong vài giờ với máy tính cá nhân dùng các phần mềm có sẵn

Nếu n có độ dài 512 bit, nó có thể bị phân tích bởi vài trăm máy tính tại thời điểm năm 1999 Một thiết bị lý thuyết có tên là TWIRL do Shamir và Tromer mô tả năm

2003 đã đặt ra câu hỏi về độ an toàn của khóa 1024 bit Vì vậy hiện nay người ta khuyến cáo sử dụng khóa có độ dài tối thiểu 2048 bit

Trang 37

Năm 1993, Peter Shor công bố thuật toán Shor chỉ ra rằng: Máy tính lượng tử

(trên lý thuyết) có thể giải bài toán phân tích ra thừa số trong thời gian đa thức Tuy

nhiên, máy tính lượng tử vẫn chưa thể phát triển được tới mức độ này trong nhiều năm nữa

5.4 Các dạng tấn công

- Tấn công trong quá trình tạo khóa: Việc tìm ra 2 số nguyên tố đủ lớn

p và q thường được thực hiện bằng cách thử xác suất các số ngẫu nhiên có độ lớn phù hợp và p và q cần được chọn không quá gần nhau để phòng trường hợp phân tích n bằng phương pháp phân tích Fermat Giải pháp là chọn trước số e đủ lớn và hiện nay thường được mặc định là 65535

- Tấn công liên quan đến tốc độ: RSA có tốc độ thực hiện chậm hơn đáng kể

so với DES và các thuật toán mã hóa đối xứng khác Trên thực tế, Bob sử dụng một thuật toán mã hóa đối xứng nào đó để mã hóa văn bản cần gửi vàchỉ sử dụng RSA để

mã hóa khóa để giải mã (thông thường khóa ngắn hơn nhiều so với văn bản)

- Phân phối khóa: Cũng giống như các thuật toán mã hóa khác, cách thức

phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn

của RSA Quá trình phân phối khóa cần chống lại được tấn công đứng giữa

(man-in-the-middle attack) Giả sử kẻ xấu (C) có thể gửi cho người gửi thông tin(A) một khóa

bất kỳ và khiến (A) tin rằng đó là khóa (công khai) của đối tác(B) Đồng thời (C) có khả năng đọc được thông tin trao đổi giữa (A) và (B) Khi đó, (C) sẽ gửi cho (A) khóa công khai của chính mình (mà (A) nghĩ rằng đó là khóa của (B)) Sau đó, (C) đọc tất

cả văn bản mã hóa do (A) gửi, giải mã với khóa bí mật của mình, giữ 1 bản copy đồng thời mã hóa bằng khóa công khai của (B) và gửi cho (B) Về nguyên tắc, cả (A) và (B) đều không phát hiện ra sự can thiệp của người thứ ba Các phương pháp chống lại dạng tấn công này thường dựa trên các chứng thực khóa công khai hoặc các thành phần của hạ tầng khóa công khai

Trang 38

- Tấn công dựa trên thời gian: Vào năm 1995, Paul Kocher mô tả một dạng

tấn công mới lên RSA: Nếu kẻ tấn công nắm đủ thông tin về phần cứng thực hiện mã

hóa và xác định được thời gian giải mã đối với một số bản mã lựa chọn thì có thể

nhanh chóng tìm ra khóa d Dạng tấn công này có thể áp dụng đối với hệ thống chữ

ký điện tử sử dụng RSA Năm 2003, Dan Boneh và David Brumley chứng minh một dạng tấn công thực tế hơn: Phân tích thừa số RSA dùng mạng máy tính (Máy chủ web dùng SSL) Tấn công đã khai thác thông tin rò rỉ của việc tối ưu hóa định lý số

dư Trung quốc mà nhiều ứng dụng đã thực hiện

Để chống lại tấn công dựa trên thời gian là đảm bảo quá trình giải mã luôn diễn ra trong thời gian không đổi bất kể văn bản mã Tuy nhiên, cách này có thể làm

giảm hiệu suất tính toán Thay vào đó, hầu hết các ứng dụng RSA sử dụng một kỹ

thuật gọi là che mắt Kỹ thuật này dựa trên tính nhân của RSA: thay vì tính c d mod n, đầu tiên chọn một số ngẫu nhiên r và tính (r e c) d mod n Kết quả của phép tính này là

r m mod n và tác động của r sẽ được loại bỏ bằng cách nhân kết quả với nghịch đảo

của r Đối với mỗi văn bản mã, người ta chọn một giá trị của r Vì vậy, thời gian giải

mã sẽ không còn phụ thuộc vào giá trị của văn bản mã

- Tấn công bằng phương pháp lựa chọn thích nghi bản mã: Năm 1981,

Daniel Bleichenbacher mô tả dạng tấn công lựa chọn thích nghi bản mã (adaptive chosen ciphertext attack) đầu tiên có thể thực hiện trên thực tế đối với một văn bản

mã hóa bằng RSA Văn bản này được mã hóa dựa trên tiêu chuẩn PKCS #1 v1, một

tiêu chuẩn chuyển đổi bản rõ có khả năng kiểm tra tính hợp lệ của văn bản sau khi giải mã

Do những khiếm khuyết của PKCS #1, Bleichenbacher có thể thực hiện một

tấn công lên bản RSA dùng cho giao thức SSL (tìm được khóa phiên) Do phát hiện

này, các mô hình chuyển đổi an toàn hơn như chuyển đổi mã hóa bất đối xứng tối ưu

(Optimal Asymmetric Encryption Padding) được khuyến cáo sử dụng Đồng thời

Trang 39

phòng nghiên cứu của RSA cũng đưa ra phiên bản mới của PKCS #1 có khả năng

chống lại dạng tấn công nói trên

5.5 Một số phương thức mã hóa nâng cao

- RSAES-PKCS #1v1.5: Là kỹ thuật mã hóa nâng cao của PKCS1 và được

sử dụng phổ biến nhất hiện nay trên hầu hết các thư viện RSA, chi tiết về phương

pháp này sẽ được giới thiệu kỹ hơn tại phần II.5.6

- RSAES-OAEP: Kỹ thuật mã hóa OAEP cho việc mã hóa được mô tả trong

PKCS # 1 phiên bản 2 và IEEE P136 Nó an toàn hơn so với phương pháp mã hóa PKCS # 1v1.5 được mô tả ở trên, có thể xem là an toàn nhất Các kỹ thuật mã hóa liên quan đến công thức sinh mặt nạ (mask generation function-MGF) dựa trên một hàm băm và không có cấu trúc rõ ràng trong khối mã hóa, không giống như phương pháp mã hóa PKCS # 1v1.5 Mặc dù là phương pháp được đề nghị cho thập kỷ qua, OAEP không được sử dụng trong thực tế như nhiều như mong đợi Thậm chí hầu như

là không có, có lẽ là do tính phức tạp của nó

* RSASSA-PSS: Phương pháp mã hóa PSS được sử dụng để mã hóa trước

khi tạo ra một chữ ký Kỹ thuật này được mô tả trong PKCS # 1v2.1 và cũng tương

tự như trong thiết kế để mã hóa OAEP sử dụng để mã hóa liên quan đến một MGF dựa trên một hàm băm Tuy nhiên, có bằng sáng chế liên quan đến hoạt động với phương pháp này, vì vậy người ta không thể sử dụng nó nếu không có bản quyền Với việc hiện nay phương pháp PKCS # 1v1.5 vẫn được xem là an toàn và vướng phải bản quyền, PSS cũng không được sử dụng nhiều trong thực tế

- Công thức ký X9.31:Chuẩn ANSI X9.31 [AX931] yêu cầu sử dụng số

nguyên tố mạnh có nguồn gốc để tránh các cuộc tấn công đặc biệt mà có lẽ không còn phù hợp X9.31 sử dụng một phương pháp mã hóa với khóa cụ thể cho các thuật toán băm Tạo một khóa với chiều dài chính xác của 256 bit Các thuật toán tương tự như vậy được quy định trong chuẩn mã hóa IEEE1363, gọi là IFSP-RSA2

Trang 40

- ISO/IEC 9796: IOS / IEC 9796 là một tiêu chuẩn cũ được nghĩ ra trước khi

có một công thức băm như MD5 hoặc SHA-1 Nó cho phép toàn bộ tin nhắn được phục hồi Thật không may, Các chữ ký thường bị hỏng và chỉ ổn với các bản rõ được

mã hóa Nó được sử dụng trong mô tả các chương trình AUTACK trong [EDIFACT].s

5.6 Ký và mã hóa bằng PKCS#1 v1.5

5.6.1 Chuyển đổi văn bản rõ

Như đã nói trong phần giải thuật RSA II.5.2, trước khi thực hiện mã hóa, ta

phải thực hiện việc chuyển đổi văn bản rõ (chuyển đổi từ M sang m) sao cho không

có giá trị nào của M tạo ra văn bản mã không an toàn Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề sau:

Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương ứng

Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ, giá trị

cũng nhận giá trị nhỏ (so với n) Như vậy phép môđun không có tác dụng

và có thể dễ dàng tìm được m bằng cách khai căn bậc e của c (bỏ qua môđun)

 RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên) nên

kẻ tấn công có thể thực hiện tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra giữa bản rõ và bản mã Khi gặp một bản mã, kẻ tấn công sử dụng bảng tra để tìm ra bản rõ tương ứng

Trên thực tế, ta thường gặp 2 vấn đề đầu khi gửi các bản tin ASCII ngắn với

m là nhóm vài ký tự ASCII Một đoạn tin chỉ có 1 ký tự NULL sẽ được gán giá trị m

= 0 và cho ra bản mã là 0 bất kể giá trị của e và N Tương tự, một ký tự ASCII khác, SOH, có giá trị 1 sẽ luôn cho ra bản mã là 1 Với các hệ thống dùng giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ

Ngày đăng: 25/07/2017, 21:53

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Burton S. Kaliski Jr. (1993), ANSI X9.31 - A Layman's Guide to a Subset of ASN.1, BER, and DER, 1993.http://luca.ntop.org/Teaching/Appunti/asn1.html Link
2. Phan Đình Diệu (2002), ĐH Quốc gia HN, Lý thuyết mật mã và an toàn thông tin.http://www.ebook.edu.vn/?page=1.39&amp;view=19768 Link
3. Phan Huy Khánh, Hồ Phan Hiếu (2009), Đại Học Bách Khoa Đà Nẵng, Giải pháp ứng dụng chữ ký điện tử trong quá trình gửi và nhận văn bản, Tạp chí khoa học và công nghệ, Đại Học Đà Nẵng số 5(34) 2009.http://www.kh-sdh.udn.vn/zipfiles/so34/67-72.pdf Link
4. R. Rivest, A. Shamir and L. Adleman (1978), A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Communications of the ACM, pp. 120- 126.http://securespeech.cs.cmu.edu/reports/RSA.pdf Link
7. Trung tâm Ứng cứu khẩn cấp máy tính Việt Nam (2009), bộ Thông tin truyền thông, Tiêu chuẩn An toàn an ninh thông tin ISO/IEC 27001:2009, tr.10-18.http://mic.gov.vn/admin/assets/pdf_mra/2009/27001_2009.pdf Link
6. Ts. Trần Đức Khánh, ĐH Bách Khoa HN, Slide bài giảng Mật mã và ứng dụng – Chữ ký số Khác

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w