Để đảm bảo được điều đó quá trình làm đề tài nghiên cứu theo các hướng chính sau : - nghiên cứu các thuật toán mã hóa các chuẩn mã hóa đang đã được thế giới sử dụng và đánh giá tính khả
Trang 1Mục lục
Mục lục 1
LỜI CẢM ƠN Error! Bookmark not defined Mở Đầu 3
1 Tính cấp thiết của đề tài 3
2 Mục đích và phương pháp nghiên cứu đồ án 4
3 Bố cục của đồ án 4
Chương I 5
BẢO MẬT THÔNG TIN 5
1.1 Bảo mật thông tin và tầm quan trọng của nó 5
1.2 Sơ lược về lịch sử mật mã 6
1.3 Phân loại các hệ mật mã 9
1.4 Tiêu chuẩn đánh giá hệ mật mã 10
1.4.1 Độ an toàn 11
1.4.2 Tốc độ mã hóa và giải mã 12
1.4.3 Phân phối khóa 12
1.5 Cơ sở toán học 13
1.5.1 Lý thuyết thông tin 13
1.5.2 Lý thuyết về độ phức tạp 15
1.5.3 Lý thuyết toán học 20
1.5.4 Các thuật toán kiểm tra số nguyên tố 21
1.6 Hệ mật mã RSA 21
1.6.1 Mô tả thuật toán 22
1.6.2 Thuật toán 22
1.7 Chuẩn mã dữ liệu DES 23
1.7.1 Giới thiệu chung về DES 23
1.7.2 Mô tả thuật toán 24
1.7.3 Giải mã DES 36
1.7.4 Sự an toàn của DES 37
1.7.5 DES trong thực tế 38
Chương II 39
BẢO MẬT TRONG JAVA VÀ MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP NETBEAN 39
2.1 Giới thiệu về Java 39
2.2 Lý do chọn Java 39
2.2.1 Đơn giản 40
2.2.2 Hướng đối tượng 40
2.2.3 Độc lập phần cứng và hệ điều hành 40
2.2.4 Mạnh mẽ 40
2.2.5 Bảo mật 41
2.2.6 Phân tán 41
2.2.7 Đa luồng 41
2.2.8 Động 41
2.3 Dịch và thực thi một chương trinh Java 42
2.4 Máy ảo Java 42
Trang 22.5 Lập trình hướng đối tượng trong Java Error! Bookmark not defined
2.5.1 Lớp (class) Error! Bookmark not defined
2.5.2 Hàm - Phương thức lớp (Method) Error! Bookmark not defined
2.5.3 Khởi tạo một đối tượng (Constructor) Error! Bookmark not defined
2.5.4 Tính kế thừa Error! Bookmark not defined 2.6 Luồng và tập tin Error! Bookmark not defined
2.7 Dòng Vào/Ra dữ liệu (I/O Streams) 43
2.7.1 Các dòng (Streams) 43
2.7.2 Gói Java.io 44
2.8 Các công cụ bảo mật trong Java 48
2.8.1 Java Cryptography Extension (JCE) 48
2.8.2 Các lớp Engine 49
2.9 Lập trình Socket với Java 50
2.9.1 Định nghĩa: 50
2.9.2 Các thuộc tính của Socket 52
2.9.3 Các hàm thông dụng của Socket 53
2.10 Môi trường phát triển tích hợp NetBeans 58
2.10.1 NetBeans Profiler 59
2.10.2 Giao diện thiết kế công cụ 59
2.10.3 NetBeans JavaScript Editor 59
2.10.4 Lý do chọn Netbean 59
2.10.5 Sử dụng Netbean 60
Chương III 65
XÂY DỰNG CHƯƠNG TRÌNH MÃ HÓA ỨNG DỤNG TRONG TRUYỀN FILE 65
Trang 3Mở Đầu
1 Tính cấp thiết của đề tài
Bảo mật bảo đảm an toàn thông tin dữ liệu hiện đang là vấn đề thời sự là một chủ đề rộng có liên quan đến nhiều lĩnh vực và trong thực tế có nhiều phương pháp được thực hiện để bảo vệ an toàn thông tin dữ liệu ngày nay với sự phát triển nhanh chóng của các hệ thống thông tin trên mạng thì các nguy cơ xâm nhập vào các hệ thống thông tin, các mạng dữ liệu ngày càng tă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.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 linh Thật vậy, cần phải hiểu rằng không có một hệ thống thông tin nào được bảo mật 100% Bất kì một hệ điều hành nào mà chúng ta đang sử dụng cũng có thể có những lỗ hổng về an ninh và chưa phát hiện ra Bộ phận quản trị mạng cũng có thể không phát hiện nhanh được những xâm nhập trái phép có thể làm hư hỏng, thậm chí phá hủy thông tin của người sử dụng Như vậy yêu cầu cấp thiết đặt ra là phải có một giải pháp tối ưu cho bài toán bảo mật và mã hóa thông tin có lẽ là giải pháp tối ưu hơn cả
Từ mấy thập niên gần đây, bước vào kỷ nguyên máy tính, cũng như đối với nhiều lĩnh vực khác, lĩnh vực mật mã cũng đã có những chuyển biến to lớn từ
giai đoạn mật mã truyền thống sang giai đoạn mật mã máy tính máy tính điện tử
được sử dụng ngày càng phổ biến trong việc lập mật mã, giải mật mã, và những chuyển biến đó đã kích thích việc nghiên cứu các giải pháp mật mã, biến việc nghiên cứu mật mã thành một khoa học có đối tượng ngày càng rộng lớn và được
sử dụng có hiệu quả trong nhiều phạm vi hoạt động của cuộc sống
Chính từ những yêu cầu và su hướng phát triển như vậy mà tôi chọn đề tài
“Cài đặt bài toán mã hóa bằng Java ứng dụng trong truyền File” với mục đích
nhằm giải quyết được phần nào bài toán bảo mật trong truyền dữ liệu
Trang 4Tôi xin cam đoan nội dung trình bầy trong đồ án không phải là sao chép từ nội dung cơ bản của bất kì bản đồ án nào khác và sản phẩm của đồ án là do chính mình nghiên cứu xây dựng nên
2 Mục đích và phương pháp nghiên cứu đồ án
Xây dựng được một chương trình mã hóa thông tin trong quá trình truyền
dữ liệu đảm bảo được tính bí mật của thông tin truyền đi và tính toàn vẹn của thông tin nhận được, đảm bảo được thời gian mã hóa và giả mã trong phạm vi cho phép, đáp ứng được khả năng của phần cứng và tốc độ truyền dữ liệu ở mức cho phép
Để đảm bảo được điều đó quá trình làm đề tài nghiên cứu theo các hướng chính sau :
- nghiên cứu các thuật toán mã hóa các chuẩn mã hóa đang đã được thế giới sử dụng và đánh giá tính khả thi.lựa trọn ra phương pháp mã hóa phù hợp với yêu cầu bài toán
- Tìm hiểu, nghiên cứu phương pháp truyền file phổ biến đang được sử dụng, tốc độ truyền dữ liệu cho phép là bao nhiêu người dùng có thể chấp nhận được
- Tìm hiểu khả năng đáp ứng về phần cứng đối với từng thuật toán mã hóa trong điều kiện của nước ta để đưa ra giải pháp mã hóa phù hợp
- Lựa trọn ngôn ngữ lập trình phù hợp với những yêu cầu đặt ra
3 Bố cục của đồ án
Đồ án gồm phần mở đầu, 3 chương nội dung, phần kết luận và phần tài
liệu tham khảo được cấu trúc như sau:
Chương I : Giới thiệu về bảo mật thông tin và tính cấp thiết của bảo mật thông tin
Chương II : Giới thiệu ngôn ngữ Java, các gói bảo mật trong Java, môi trường phát triển tích hợp Netbean
Chương III : Ứng dụng cài đặt bài toán mã hóa trong quá trình truyền File
Trang 5Chương I BẢO MẬT THÔNG TIN
1.1 Bảo mật thông tin và tầm quan trọng của nó
Thông tin (Information) như là những tài sản quan trọng khác của các doanh ngiệp, các tổ chức, cá nhân Thông tin có thể tồn tại dưới nhiều dạng khác nhau, nhưng ở bất kì dạng nào nó cũng được chia sẻ, lưu trữ và cần được bảo vệ Bảo mật thông tin là bảo đảm cho thông tin tránh được các đe dọa như mất mát, đánh cắp thông tin…Bảo mật thông tin phải đảm bảo các yêu cầu sau : + Tính bảo mật : thông tin phải được bảo vệ tránh được các sự xâm nhập trái phép
+ Tính toàn vẹn dữ liệu : phải giám sát được sự thay đổi thông tin tránh tránh mất mát, sai lệnh thông tin
+ Tính sẵn sàng : Thông tin bảo vệ đảm bảo việc truy cập dễ dàng đối với người được phép truy cập
+ Đúng pháp luật : thông tin được tập hợp được sử lý và sử dụng đúng quy định của pháp luật
Những nguyên nhân dẫn đến việc mất an toàn thông tin :
+ Lỗi do con người : 52%, kẻ sấu :10%, hỏa hoạn : 15%, lũ lụt: 10%, khũng bố: 3%
+ Các loại tội phạm máy tính: ăn trộm tiền: 44%, phá hủy phần mềm: 16%, trộm thông tin: 16%, thay đổi dữ liệu: 12%, tấn công các dịch vụ: 10%, xâm phạm đời tư : 2%
Vi sao phải bảo mật thông tin ?
Ngày nay với sự phát triển mạnh mẽ của khoa học kỹ thuật, công nghệ thông tin đã được ứng dụng vào trong hầu hết các lĩnh vực trong đời sống các doanh nghiệp, các ngân hàng, trường học…các thông tin về khách hàng, chiến lược kinh doanh …đều được lưu trữ và trao đổi thông qua công nghệ vi tính và truyền thông Vì vậy mà khả năng rui do trong quá trình truyền tin cũng là rất lớn Ví dụ như trong ngân hàng nếu thông tin khách hàng bị đánh cắp thì đồng
Trang 6nghĩa với tài khoản ngân hàng của khách hàng đó cũng bị đánh cắp gây thiệt hại rất lớn cho ngân hàng cũng như khách hàng của họ vì vậy thông tin cần phải được bảo mật tránh các sự truy cập trái phép
Làm sao để có chính sách bảo mật tốt ?
+ Biết được các quy trình và dữ liệu gì cấn được bảo vệ
+ Nhận biết được các mối đe dọa, phán đoán sự ảnh hưởng của chúng + Tính toán các rủi ro và quyết định các rủi ro nào có thể chấp nhận
+ Đưa ra các chiến lược nhằm giảm thiểu các rủi ro đến mức có thể chấp nhận được
+ Thực hiện, kiểm tra và điều chỉnh chiến lược
đó khôi phục lại văn bản dõ để hiểu được thông tin mà A muốn gửi cho mình Vì bản gửi đi thường được chuyển qua các con đường công khai nên người ngoài có thể “lấy trộm” được, nhưng do đó là bản mật mã nên không đọc hiểu được, còn A
có thể tạo ra bản mã mật và B có thể gải bản mã mật thành bản rõ để hiểu được là
do giữa hai người đã có một thỏa thuận về một Chìa khóa chung, trong thực tiễn,
Trang 7đã có hoạt động bảo mật thì cũng có các hoạt động ngược lại là khám phá bí mật
từ các bản mã mật “lấy trộm ” được, ta thường gọi hoạt động này là thám mã,
hoạt động này quan trọng không kém gì hoạt động bảo mật Vì các thuật toán lập mật mã và giải mã không nhất thiết là bí mật, nên mã thám thường được tập
trung vào việc tìm khóa mật mã, do đó cũng có người gọi công việc này là phá khóa
Suốt mấy nghìn năm lịch sử, các thông báo, thư từ được truyền đưa và trao đổi với nhau thường là các văn bản, tức là có dạng các dãy ký tự trong một ngôn ngữ nào đó Vì vậy, các thuật toán lập mật mã thường cũng đơn giản là thuật toán sáo trộn, thay đổi các ký tự được xác định bởi các phép chuyển dịch, thay thế hay hoán vị các ký tự trong bảng ký tự của ngôn ngữ tương ứng khóa mật mã là thông tin dùng để thực hiện phép lập mật mã và giải mã Ngày đó mật
mã chưa phải là khoa học,do đó chưa có nhiều kiến thức sách vở để lại, tuy nhiên hoạt động bảo mật và thám mã trong lịch sử các cuộc đấu tranh chính trị, ngoại giao và quân sự thì hết sức phong phú, và mật mã đã có nhiều tác động rất quan trọng đưa đến những kết quả nhiều khi có ý nghĩa quyết định đối với các cuộc đấu tranh đó Do trong một thời gian dài bản thân hoạt động mật mã cũng được xem là một bí mật, nên các tài liệu kỹ thuật về mật mã được phổ biến đến nay thường chỉ ghi lại các kiến thức kinh nghiệm, thỉnh thoảng mới có vài “phát minh” như các hệ mật mã Vigenere vào thế kỷ 16 hoặc hệ mã Hill ra đời năm
1929 là các hệ mã thực hiện phép chuyển dịch (đối với mã Vigenere) hay phép thay thế (mã Hill) đồng thời trên một nhóm ký tự chứ không phải trên từng ký tự riêng rẽ Vấn đề thám mã, ngược lại, khi thành công thường đưa đến những cống hiến nổi trội và ấn tượng trong những tình huống gay cấn của các cuộc đấu tranh,
và cũng thường đòi hỏi nhiều tài năng phát hiện với những kinh nghiệm và suy luận tinh tế hơn
Bước sang thế kỷ 20, với những tiến bộ liên tục của kỹ thuật tính toán và truyền thông, nghành mật mã cũng đã có những tiến bộ to lớn Vào những thập niên đầu của thế kỷ, sự phát triển của các kỹ thuật biểu diễn, truyền và sử lý tín hiệu đã có tác động giúp cho hoạt động lập và giải mật mã từ thủ công chuyển sang cơ giới hóa rồi điện tử hóa Các văn bản, các bản mật mã trước đây được
Trang 8viết bằng ngôn ngữ thông thường nay được viết bằng kỹ thuật số thành các dãy tín hiệu nhị phân, tức là các dãy bit, và các phép biến đổi trên các dãy ký tự được chuyển thành các phép biến đổi trên các dãy bit, hay các dãy số, việc thực hiện các phép lập mã, giải mã trở thành việc thực hiện các hàm số số học Toán học và
kỹ thuật tính toán bắt đầu trở thành công cụ cho việc phát triển khoa học về mật
mã Khái niệm trung tâm của khoa học mật mã là khai niệm Bí mật Đó là một
khái niệm phổ biến trong đời sống Khái niệm bí mật ban được gắn với khái niệm
ngẫu nhiên, rồi về sau trong những thập niên gần đây, với khái niệm Phức tạp ,
cụ thể hơn là khái niệm Độ phức tạp tính toán Việc sử dụng lý thuyết xác suất
và ngẫu nhiên làm cơ sở để nghiên cứu mật mã đã giúp C.Shannon đưa ra khái
niệm bí mật hoàn toàn của một hệ mật mã từ năm 1948, khởi đầu cho một lý
thuyết xác xuất về mật mã Trong thực tiễn làm mật mã, các dãy bit ngẫu nhiên được dùng để trộn với bản rõ (dưới dạng một dãy bit xác định) thành bản mã
Lý thuyết về độ phức tạp tính toán ra đời từ giữa những năm 1960 đã cho
ta một cách thích hợp để quy yêu cầu bí mật hoặc ngẫu nhiên về một yêu cầu có
thể định nghĩa được là yêu cầu về độ phức tạp tính toán Bây giờ ta có thể nói :
một giải pháp mật mã là bảo đảm bí mật, nếu mọi thuật toán thám mã, nếu có, đều phải được thực hiện với độ phức tạp tính toán cực lớn Tức là nó vượt quá giới hạn khả năng tính toán (bao gồm cả máy tính) mà người thám mã có thể có
Về lý thuyết, có thể xem đó là những độ phức tạp tính toán với tốc độ tăng vượt quá hàm mũ, hoặc thuộc loại NP-khó Tuy nhiên, lý thuyết độ phức tạp tính toán không chỉ cống hiến cho ta một khái niệm để giúp chính xác hóa tiêu chuẩn bí mật của các giải pháp mật mã, mà còn mở ra một giai đoạn mới của nghành mật
mã, biến nghành mật mã thành một khoa học có nội dung lý luận phong phú và
có những ứng dụng thực tiễn quan trọng trong nhiều lĩnh vực của đời sống hiện đại Bước ngoặt có tính cách mạng trong lịch sử khoa học mật mã hiện đại xẩy ra
vào năm 1976 khi hai tác giả Diffie và Hellman đưa ra khái niệm về mật mã khóa công khai và một phương pháp trao đổi công khai để tạo ra một khóa bí mật
chung mà tính an toàn được bảo đảm bởi độ khó của một bài toán toán học cụ thể (bài toán tính “Logarit rời rạc”) Hai năm sau, năm 1978, Rivest, Shamir và
Adleman tìm ra một hệ mật mã khóa công khai và một sơ đồ chữ ký điện tử hoàn
Trang 9toàn có thể ứng dụng trong thực tiễn, tính bảo mật và an toàn của chúng được bảo đảm bằng độ phức tạp của một bài toán số học nổi tiếng là bài toán phân tích số nguyên thành các số nguyên tố Sau phát minh ra hệ mật mã đó (mà nay thường được gọi là RSA), việc nghiên cứu để phát minh ra các hệ mật mã khóa công khai vào các bài toán khác nhau của an toàn thông tin đã được tiến hành rộng rãi,
lý thuyết mật mã và an toàn thông tin trở thành một lĩnh vực khoa học được phát triển nhanh trong vài ba thập niên cuối của thế kỷ 20, lôi cuốn theo sự phát triển của một số bộ môn của toán học và tin học
1.3 Phân loại các hệ mật mã
Có nhiều cách phân loại hệ mật mã Dựa vào cách truyền khóa có thể phân các hệ mật mã thành hai loại:
- Hệ mật đối xứng (hay còn gọi là mật mã khóa bí mật):
Là những hệ mật dùng chung một khóa cả trong quá trình mã hóa dữ liệu
và giải mã dữ liệu Do đó khóa phải được giữ bí mật tuyệt đối
Trong quá trình tiến hành trao đổi thông tin giữa bên gửi và bên nhận thông qua việc sử dụng phương pháp mã hóa đối sứng, thì thành phần quan trọng nhất cần phải được giữ bí mật đó là khóa Việc trao đổi, thỏa thuận về thuật toán được sử dụng trong việc mã hóa có thể được tiến hành một cách công khai, nhưng bước thỏa thuận về khóa trong việc mã hóa và giải mã phải tiến hành bí mật chúng ta
có thể thấy rằng thuật toán mã hóa đối xứng sẽ rất có lợi khi được áp dụng trong các cơ quan hay tổ chức đơn lẻ nhưng nếu cần phải trao đổi thông tin với một bên thứ 3 thì việc đảm bảo tính bí mật của khóa được đặt lên hàng đầu Mã hóa đối xứng có thể được phân thành hai loại: loại thứ nhất là tác động trên bản rõ theo từng nhóm bits Từng nhóm bits này được gọi là các khối (Block) thuật toán này gọi là mã hóa khối (Block Cipher) Theo đó, từng khối dữ liệu trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài Đối với các thuật toán ngày nay thì kích thước chung của một Block là 64 bits
Loại thứ hai tác động lên bản rõ theo từng bit một các thuật toán áp dụng được gọi là Stream Cipher Theo đó, dữ liệu của văn bản được mã hóa từng bit
Trang 10một các thuật toán mã hóa dòng này có tốc độ nhanh hơn các thuật toán mã hóa khối và nó thường được áp dụng khi lượng dữ liệu mã hóa chưa biết trước
Một số thuật toán nổi tiếng trong mã hóa đối sứng là : DES, Triple DES (3DES), RC4, AES…
- Hệ mật mã bất đối xứng (hay còn gọi là mật mã khóa công khai) :
Các hệ mật này dùng một khóa để mã sau đó dùng một khóa khác để giải
mã, nghĩa là khóa để mã hóa và giải mã là khác nhau Các khóa này tạo nên từng cặp chuyển đổi ngược nhau và không có khóa nào có thể suy được từ khóa kia Khóa dùng để mã hóa có thể công khai nhưng khóa dùng để giải mã phải giữ bí mật do đó trong thuật toán này có 2 loại khóa : khóa để mã hóa được gọi là khóa công khai (public key), khóa để giải mã được gọi là khóa bí mật (private key)
Mã hóa khóa công khai ra đời để giải quyết vấn đề về quản lý và phân phối khóa của các phương pháp mã hóa đối xứng quá trình truyền và sử dụng mã hóa khóa công khai được thực hiện như sau: Bên gửi yêu cầu cung cấp hoặc tự tìm khóa công khai của bên nhận trên một server chịu trách nhiệm quản lý khóa Sau đó hai bên thống nhất thuật toán dùng để mã hóa dữ liệu, bên gửi sử dụng khóa công khai của bên nhận cùng với thuật toán đã thống nhất để mã hóa thông tin được gửi đi Khi nhận được thông tin đã mã hóa, bên nhận sử dụng khóa bí mật của mình để giải mã và lấy ra thông tin ban đầu vậy là với sự ra đời của mã hóa công khai thì khóa được quản lý một cách linh hoạt và hiệu quả hơn Người sử dụng chỉ cần bảo vệ private key Tuy nhiên nhược điểm của mã hóa khóa công khai nằm ở tốc độ thực hiện, nó chậm hơn rất nhiều so với mã hóa đối xứng Do đó người ta thường kết hợp hai hệ thống mã hóa khóa đối xứng và công khai lại với nhau và được gọi là Hybrid Cryptosystems Một số thuật toán mã hóa công khai nổi tiếng : Diffle-Hellman,RSA,
1.4 Tiêu chuẩn đánh giá hệ mật mã
Để đánh giá một hệ mật mã người ta thường đánh giá thông qua các tính chất sau :
Trang 111.4.1 Độ an toàn
Một hệ mật được đưa vào sử dụng điều đầu tiên phải có độ an toàn cao
Ưu điểm của mật mã là có thể đánh giá được độ an toàn thông qua độ an toàn tính toán mà không cần phải cài đặt một hệ mật được coi là an toàn nếu để phá
hệ mật mã này phải dùng n phép toán Mà để giải quyết n phép toán cần thời
gian vô cùng lớn, không thể chấp nhận được
Một hệ mật mã được coi là tốt thì nó cần phải đảm bảo các tiêu chuẩn sau :
- Chúng phải có phương pháp bảo vệ mà chỉ dựa trên sự bí mật của các khóa, còn thuật toán thì công khai Theo một số tài liệu thì trước đây tính an toàn , bí mật của một số thuật toán phụ thuộc vào phương thức làm việc của thuật toán
đó Nếu như tính an toàn của một thuật toán chỉ dựa vào sự bí mật của thuật toán
đó là một thuật toán hạn chế (Restricted Algrorithm) Restricted Algrorithm có tầm quan trọng trong lịch sử nhưng còn phù hợp trong thời đại ngày nay Giờ đây, nó không còn được mọi người sử dụng do mặt hạn chế của nó : mỗi khi một user rời khỏi một nhóm thì toàn bộ nhóm đó phải chuyển sang sử dụng thuật toán khác nếu người đó người trong nhóm đó tiết lộ thông tin vè thuật toán hay có kẻ phát hiện ra tính bí mật của thuật toán đó đã bị phá vỡ, tất cả những user còn lại trong nhóm buộc phải thay đổi lại thuật toán dẫn đến mất thời gian và công sức
Hệ thống mã hóa hiện nay đã giải quyết trên thông qua khóa (Key) là một yếu tố
có liên quan nhưng tách rời ra khỏi thuật toán mã hóa Do các thuật toán hầu như được công khai cho nên tính an toàn của mã hóa giờ đây phụ thuộc vào khóa Khóa này có thể là bất kì một giá trị chữ hoặc số nào Phạm vi không gian các giá
trị có thể có của khóa được gọi là Keyspace Hai quá trình mã hóa và giải mã đều
dùng đến khóa Hiện nay , người ta phân loại thuật toán dựa trên số lượng và đặc tính của khóa được sử dụng
Nguyên tắc đầu tiên trong mã hóa là : “Thuật toán nào cũng có thể bị phá vỡ ” Các thuật toán khác nhau cung cấp mức độ an toàn khác nhau, phụ thuộc vào độ phức tạp để phá vỡ chúng Tại một thời điểm , độ an toàn của một thuật toán phụ thuộc :
Trang 12+ Nếu chi phí hay phí tổn cần thiết để phá vỡ một thuật toán lớn hơn giá trị thuật toán của thông tin đã mã hóa thuật toán thì thuật toán đó tạm thời được coi là an toàn
+ Nếu thời gian cần thiết dùng để phá vỡ một thuật toán là là quá lâu thì thuật toán đó tạm thời được coi là an toàn
+ Nếu lượng dữ kiệu cần thiết để phá vỡ một thuật toán quá lớn so với lượng dữ liệu đã được mã hóa thì thuật toán đó tạm thời được coi là an toàn
Từ tạm thời ở đây có nghĩa là độ an toàn của thuật toán đó chỉ đúng trong một thời diểm nhất định nào đó, luôn luôn có khả năng cho phép những người phá mã tìm ra cách để phá vỡ thuật toán Điều này chỉ phụ thuộc vào thời gian, công sức, lòng đam mê cũng như tính kiên trì bền bỉ Càng ngày tốc độ xủ lý của CPU càng cao , tốc độ tính toán của máy tính càng nhanh , cho nên không ai dám khẳng định chắc chắn một điều rằng thuật toán mình xây dựng sẽ an toàn mãi mãi Trong lĩnh vực mạng máy tính và truyền thông luôn luôn tồn tại hai phe đối lập với nhau những người chuyên đi tấn công, khai thác lỗ hổng của hệ thống và nhừng người chuyên phòng thủ , xây dựng các quy trình bảo vệ hệ thống Cuộc chiến giữa hai bên chẳng khác gì cuộc chơi trên bàn cờ, từng bước đi , nước bước
sẽ quyết định số phậ của mỗi bên Trong cuộc chiến này , ai giỏi hơn sẽ dành được phần thắng Trong thế giới mã hóa cũng vậy , tất cả phụ thuộc vào trình đọ
và thời gian …sẽ không ai có thể nói trước được điều gì Đó là điểm thú vị của trò chơi
- Bản mã C không được có đặc điểm gây chú ý nghi ngờ
1.4.2 Tốc độ mã hóa và giải mã
khi đánh giá hệ mật mã chúng ta phải chú ý đến tốc độ mã và giải mã hệ mật tốt thời gian mã và giải mã nhanh
1.4.3 Phân phối khóa
Một hệ mật mã phụ thuộc vào khóa, khóa này được truyền công khai hay truyền khóa bí mật Phân phối khóa bí mật Phân phối khóa bí mật thì chi phí sẽ cao hơn so với cá hệ mật có khóa công khai Vì vậy đây cũng là một tiêu chí khi lựa chọn hệ mật mã
Trang 131.5 Cơ sở toán học
Để hiểu đươc những thuật toán sử dụng trong các hệ mật mã chúng ta phải
có những kiến thức nền tảng cơ bản về toán học, lý thuyết thông tin…dưới đây
ta nhắc lại một số kiến thức cơ bản về Lý thuyết thông tin, Lý thuyết độ phức tạp,
P(X=x
i) = p
i , 0 ≤ p
i ≤ 1, 1 ≤ i ≤ n Cũng như vậy, Y và Z cũng là các biến ngẫu nhiên Entropy của X là một phép đo toán học khối lượng thông tin được cung cấp bởi một sự quan sát X Tương đương, nó là một sự không chắc chắn về kết quả trước một sự quan sát của X Entropy cũng hữu dụng cho xấp xỉ số bit trung bình được yêu cầu để mã hóa yếu tố X
Tính chất của Entropy điều kiện
X và Y là các biến ngẫu nhiên
(i) Số lượng H(X|Y) đo khối lượng sự không chắc chắn duy trì về phía X
sau khi Y được quan sát
(ii) H(X|Y) ≥ 0 và H(X|X) = 0
(iii) H(X|Y) = H(X) + H(Y|X) = H(Y) + H(X|Y)
Trang 14(iv) H(X|Y) ≤ H(X) Dấu “=” xảy ra nếu X và Y là độc lập
Tốc độ của ngôn ngữ
Đối với một ngôn ngữ, tốc độ thực tế (actual rate) của ngôn ngữ là :
r = H(M)/N Trong trường hợp này N là độ dài của thông báo và M là một thông điệp có độ dài N Tốc độ của tiếng Anh bình thường là 0.28 do đó mỗi chữ cái tiếng anh có 1.3 bit nghĩa Tốc độ tuyệt đối (absolute rate) của một ngôn ngữ là số bits lớn nhất cần thiết để mã hóa các ký tự của ngôn ngữ đó Nếu có L kí tự trong một ngôn ngữ, thì tốc độ tuyệt đối là :
R = log2L Đây là số Entropy lớn nhất của mỗi ký tự đơn lẻ Đối với tiếng Anh gồm
có 26 chữ cái tốc độ tuyệt đối là log226 = 4.7 bít/chữ cái Sẽ không có điều gì là ngạc nhiên đối với tất cả mọi người rằng thực tế tốc độ của tiếng Anh nhỏ hơn nhiều so với tốc độ tuyệt đối, và chúng ta vẫn thấy rằng đối với một thông báo bằng tiếng Anh có thể loại bỏ một số chữ cái nhưng người đọc vẫn có thể hiểu được Hiện tượng này được gọi là độ dư thừa của ngôn ngữ (Rendundancy) tự nhiên
Không chỉ đối với tiếng Anh mà với hầu hết các ngôn ngữ tự nhiên, do cấu trúc của ngôn ngữ, do việc sư dụng ngôn ngữ dẫn tới có một số chữ cái được
sử dụng với tần suất không đồng đều hoặc chỉ có thể xuất hiện với một cấu trúc nào đó làm chúng ta vẫn có thể đoán được nghĩa của các thông báo nếu loại bỏ các chữ cái này
Độ dư thừa (Redundancy) của một ngôn ngữ ký hiệu là D và D = R – r đối với tiếng Anh :
D= 1- 0.28 = 0.72 letters/ letter
D= 4.7 – 1.3 = 3.4 bits/ letter
Như vậy mỗi chữ cái có 1.3bit nghĩa và 3.4bit dư thừa (xấp xỉ 72%)
Thông tin qua lại
Định nghĩa:
Trang 15Thông tin qua lại hoặc thông tin (transinformation) của các biến ngẫu nhiên X và
Y là :
I(X; Y) = H(X) – H(X|Y)
Tương tự, thông tin của X và cặp Y, Z được định nghĩa bởi:
I(X; Y, Z) = H(X) – H(X|Y, Z)
Tính chất của thông tin qua lại
(i) Số lượng I(X; Y) có thể được nghĩ như là khối lượng tin mà Y bộc lộ về
X Tương tự, số lượng I(X; Y, Z) có thể được nghĩ như là khối lượng tin
mà Y và Z đồng thời bộc lộ về X
(ii) I(X; Y) ≥ 0
(iii) I(X; Y) = 0 nếu X và Y là độc lập (Y không đóng góp thông tin về X)
(iv) I(X; Y) = I(Y; X)
Thông tin có điều kiện
Trang 16của mỗi loại bài toán Các tài nguyên được đo lường có thể bao gồm thời gian, không gian lưu trữ, các bit ngẫu nhiên, số tiến trình… Nhưng việc tập trung chính là vào thời gian, đôi khi là không gian
Các định nghĩa cơ bản
Độ phức tạp tính toán (về không gian hay thời gian) của một tiến trình tính toán là số ô nhớ được dùng hay số các phép toán sơ cấp được thực hiện trong quá trình tính toán đó Dữ liệu đầu vào đối với một thuật toán thường được biểu diễn thông qua các từ trong một bảng kí tự nào đó Độ dài của một từ là số kí tự trong
từ đó
Định nghĩa 1:
Một thuật toán là một qui trình tính toán hoàn toàn xác định mà dùng một biến dữ liệu đầu vào và dừng lại với một kết quả ở đầu ra
Thuật ngữ “qui trình tính toán hoàn toàn xác định” không đơn thuần là toán
học Nó có thể được tạo ra bằng cách sử dụng các mô hình tính toán như: máy Turing, máy truy cập ngẫu nhiên, hoặc các mạch logic…Hơn thế nữa, nó còn liên quan đến độ phức tạp về kĩ thuật của các mô hình này Vì vậy, đơn giản hơn, một thuật toán như là một chương trình máy tính, được viết bằng một ngôn ngữ lập trình cụ thể cho mỗi máy tính cụ thể, dùng một biến dữ liệu đầu vào và dừng lại với một kết quả ở đầu ra
Vấn đề thường được quan tâm là tìm ra được thuật toán hiệu quả nhất để giải một bài toán tính toán được đưa ra Thời gian thực hiện giải thuật phụ thuộc vào từng trường hợp của bài toán Do đó, cần đưa ra chính xác đơn vị của thời gian, đặc biệt là khi so sánh sự thực thi của 2 thuật toán
Định nghĩa 2 :
Kích cỡ của đầu vào (input) là tổng số bit cần thiết để mô tả nó trong cách
kí hiệu nhị phân thông thường, bằng việc dùng một lược đồ mã hóa phù hợp Thông thường, cỡ của đầu vào sẽ là số của mục chọn trong dữ liệu đầu vào
Định nghĩa 3 :
Trang 17Thời gian chạy thực (running time) của một thuật toán với một đầu vào cụ thể là số các thao tác nguyên thủy hoặc các bước thực hiện Thường một bước cần đến 1 bít thao tác Nhưng đối với một vài giải thuật, sẽ thuận tiện hơn khi trải qua các bước như: so sánh, chỉ dẫn cơ khí, một chu kì đồng hồ cơ khí, một phép nhân module…
Định nghĩa 4:
Trường hợp chậm nhất (worst-case) của thời gian chạy thực của một thuật toán là một cận trên (upper bound) thời gian chạy thực đối với bất kỳ đầu vào nào, được diễn tả như là một hàm của dữ liệu đầu vào
Định nghĩa 5:
Trường hợp trung bình (average-case) của thời gian chạy thực của 1 thuật toán là mức trung bình của thời gian trên tất cả các đầu vào của các cỡ cố định, được diễn tả như là một hàm của dữ liệu đầu vào
Lớp phức tạp
Định nghĩa :
Một thuật toán thời gian đa thức là một thuật toán mà hàm thời gian chạy thử trường hợp tồi nhất (worst-case running time function) của nó có dạng O(nk), trong đó n là cỡ dữ liệu đầu vào (input) và k là hằng số Với bất kì thuật toán nào
mà thời gian chạy thực của nó không thể bị giới hạn (bound) được gọi là một thuật toán thời gian theo số mũ (exponential- time algorithm)
Nói một cách tổng quát, thuật toán thời gian đa thức có thể ngang bằng với các thuật toán tốt hoặc hiệu quả, trong khi thuật toán thời gian theo số mũ lại
bị xem là không hiệu quả Tuy nhiên, đối với một vài tình huống thực tế thì nét riêng biệt này lại không phù hợp
Khi xem xét độ phức tạp của thời gian đa thức (polynomial- time), bậc của
đa thức rất quan trọng, thậm chí dù một thuật toán với một thời gian chạy thực của O(nln ln n), n là cỡ của dữ liệu đầu vào (input), thì chậm hơn so với thuật toán
có thời gian chạy thực của O(n100) Thuật toán trước có thể nhanh hơn trong thực
Trang 18tế đối với các giá trị n nhỏ hơn, đặc biệt nếu các hằng số bị ẩn bởi kí hiệu O-lớn
là nhỏ hơn
Hơn thế nữa, trong mật mã học, độ phức tạp trung bình thì quan trọng hơn nhiều độ phức tạp trong trường hợp tồi nhất (worst-case) - một điều kiện cần thiết cho một lược đồ mã hóa (encryption scheme) để được coi như là an toàn Mà bài toán giải mã tương ứng thì khó trên trung bình (hoặc chính xác hơn là luôn luôn khó), và không chỉ đối với một vài trường hợp riêng biệt
Định nghĩa :
Một thuật toán thời gian chạy thử số mũ con (subexponential- time algorithm) là một thuật toán mà hàm thời gian chạy thử tồi nhất có dạng
eO(n), trong đó n là cỡ của của bộ dữ liệu đầu vào
Ví dụ: (về thời gian chạy thử số mũ con)
A là một thuật toán mà dữ liệu đầu vào hoặc là các phần tử của một trường
Quan sát thấy rằng khi α = 0 thì L
q[0, c] là một đa thức trong lnq, trong khi α =1 thì L
q[1, c] là một đa thức trong q Do đó nên đầy đủ lũy thừa trong lnq
Để đơn giản, lý thuyết độ phức tạp tính toán hạn chế sự chú ý của nó tới các bài toán quyết định (decision problems), ví dụ: Các bài toán mà có câu trả lời YES hoặc NO Điều này không quá hạn chế trong thực tiễn, vì tất cả các bài toán tính toán sẽ bị bắt gặp (encounter) ở đây có thể là cụm từ như các bài toán quyết định theo một cách như vậy, mà một thuật toán hiệu quả đối với các bài toán quyết định mang lại một thuật toán hiệu quả cho bài toán tính toán và ngược lại
Trang 19Định nghĩa :
Lớp phức tạp P là tập của tất cả các bài toán quyết định mà có thể
giải được trong thời gian đa thức
Định nghĩa :
Lớp phức tạp NP là tập của tất cả các bài toán quyết định cho một câu trả
lời YES, có thể được xác minh trong thời gian đa thức bằng cách đưa ra một vài thông tin thêm, gọi là một chứng nhận
Định nghĩa :
Lớp phức tạp co-NP là tập của tất cả các bài toán quyết định cho một câu
trả lời NO, có thể được xác minh trong thời gian đa thức bằng cách sử dụng một chứng nhận phù hợp
Phải nhấn mạnh rằng nếu một bài toán quyết định trong NP, nó có thể
không thuộc trường hợp mà chứng nhận của một câu trả lời YES có thể dễ dàng đạt được Cái được xác nhận là cái mà giống như một chứng nhận tồn tại và nếu được biết, thì có thể được dùng để xác nhận 1 cách hiệu quả câu trả lời YES
Điều tương tự cũng đúng đối với câu trả lời NO của các bài toán trong co-NP
Ví dụ:(bài toán trong NP )
Xem xét một bài toán quyết định sau:
Giả thiết: Cho một số nguyên dương n
Câu hỏi: n có phải là hợp tử hay không? Nghĩa là, có hai số nguyên a,b >1 để
n = a.b không?
Hợp tử (composite) thuộc NP bởi vì nếu một số nguyên n là hợp tử thì sự
kiện này có thể được kiểm chứng trong thời gian đa thức nếu a là số chia của n, khi 1< a < n (việc chứng nhận trong trường hợp này bao gồm cả số chia a) Điều
này cũng đúng trong trường hợp mà hợp tử thuộc về co-NP, nhưng cũng vẫn chưa xác định được là hợp tử có thuộc P hay không?
Trang 201.5.3 Lý thuyết toán học
Modulo số học:
Về cơ bản a = b(mod n) nếu a= b + kn trong đó k là một số nguyên Nếu a
và b dương và nhỏ hơn n, chúng ta có thể gọi a là phần dư của b khi chia nó cho
n nói chung a và b đều là phần dư khi chia cho n người ta còn gọi b là thặng dư của a theo modulo n, và a là đồng dư của b theo modulo n
Modulo số học cũng giống như số học bình thường, bao gồm các phép toán giao hoán, kết hợp và phân phối mặt khác giảm mỗi giá trị trung gian trong suốt quá trình tính toán
(a+b) mod n = ((a mod n) + (b mod n)) mod n (a- b) mod n = ((a mod n) - (b mod n)) mod n (a*b) mod n = ((a mod n) * (b mod n)) mod n (a*(b + c)) mod n = (((a * b) mod n) + ((a * c) mod n)) mod n Các phép tính trong các hệ mật mã hầu hết đều thực hiện đối với modulo N nào
Trang 211.5.4 Các thuật toán kiểm tra số nguyên tố
Hàm một phía (one-way function) là một khái niệm cơ bản của mã hóa công khai Việc nhân hai số nguyên tố là một ví dụ về hàm một phía, nhân các số nguyên tố lớn để tạo thành một hợp số là dễ, nhưng công việc ngược lại phân tích một số nguyên lớn thành dạng thừa số nguyên tố lại là một bài toán khó (chưa có thuật toán giải tốt)
Các thuật toán mã hóa khóa công khai đều cần phải sử dụng các số nguyên
tố Có một số phương pháp để sinh ra số nguyên tố và hầu hết chúng đều dựa trên các thuật toán kiểm tra tính nguyên tố của một số nguyên Tuy nhiên có một số vấn đề được đặt ra đối với số nguyên tố như sau
- trong một hệ thống có thể đảm bảo hai người dùng sẽ được sử dụng hai
số nguyên tố khác nhau hay không ? câu trả lời là có thể vì có tới 10150 số nguyên
tố có độ dài 512 bít hoặc nhỏ hơn
- khả năng hai người dùng sẽ lựa chọn cùng một số nguyên tố là bao nhiêu, với sự lựa trọn từ 10150 số nguyên tố
Các loại thuật toán kiểm tra số nguyên tố được chia làm hai loại: thuật toán tất định và thuật toán xác suất Các thuật toán tất định cho chúng ta biết chính xác câu trả lời một số nguyên có phải là một số nguyên tố hay không còn một thuật toán xác suất cho biết xác suất của một số nguyên là một số nguyên tố
là bao nhiêu
1.6 Hệ mật mã RSA
Trong mật mã học RSA là một thuật toán mật mã hóa công khai Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng RSA đang được sử dụng phổ biến trong thương mại điện
tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại học viện công nghệ Massachusetts(MIT) Tên của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả
Trang 221.6.1 Mô tả thuật toán
Thuật toán có hai khóa: khóa công khai(hay khóa công cộng) và khóa bí mật(hay khóa cá nhân) Mỗi khóa là những 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 bí mật 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 bí mật mới có thể giải mã được
Ta có thể mô phỏng trực quan một hệ mã khóa công khai như sau: A muốn gửi cho B một thông tin mật mà A muốn duy nhất B có thể đọc được để làm được điều này, B gửi cho A một chiếc hộp có khóa đã được mở sẵn và giữ lại chìa khóa A nhận chiếc hộp, cho vào trong đó một mảnh giấy chứa thông điệp muốn gửi cho B và khóa lại (như loại khóa thông thường chỉ cần sập chốt lại sau khi sập chốt ngay cả A cũng không thể mở lại được, không đọc lại hay sửa thông tin trong đó được nữa.) Sau đó A gửi chiếc hộp cho B B mở hộp với chìa khóa của mình và đọc thông tin trong thư Trong ví dụ này, chiếc hộp với
khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật
1.6.2 Thuật toán
Tạo khóa:
Giả sử A và B cần trao đổi thông tin bí mật cho nhau qua một kênh không
an toàn (như Internet) Với thuật toán RSA, A đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:
1 chọn 2 số nguyên tố lớn p và q với p ≠ q, lựa chọn ngẫu nhiên độc lập
Trang 236 B công bố n và e trong danh bạ làm khóa công khai (public key), còn d làm khóa bí mật (private key)
Thuật toán mã hóa và giải mã :
Mã hóa :
Bước 1: A nhận khóa công khai của B
Bước 2: A biểu diễn thông tin cần gửi thành số m (0<= m <= n-1)
Bước 3: Tính c = me mod n
Bước 4: Gửi c cho B
Giải mã :
B giải mã bằng cách tính m = cd mod n
1.7 Chuẩn mã dữ liệu DES
1.7.1 Giới thiệu chung về DES
Chuẩn mã hoá dữ liệu DES được Văn phòng tiêu chuẩn của Mỹ (U.S National Bureau for Standards) công bố năm 1971 để sử dụng trong các cơ
quan chính phủ liên bang Giải thuật được phát triển tại Công ty IBM dựa trên
hệ mã hoá LUCIFER của Feistel
DES là thuật toán mã hoá khối (block algrithm), với cỡ của một khối là 64 bít Một khối 64 bít bản rõ được đưa vào, sau khi mã hoá dữ liệu đưa ra là một khối bản mã 64 bít Cả mã hoá và giải mã đều sử dụng cùng một thuật
toán và khoá
Khoá mã có độ dài 64 bít, trong đó có 8 bít chẵn lẻ được sử dụng để
kiểm soát lỗi Các bít chẵn lẻ nằm ở các vị trí 8, 16, 24, , 64 Tức là cứ 8 bít khoá thì trong đó có 1 bít kiểm soát lỗi, bít này qui định số bít có giá trị “1” của khối 8 bít đó theo tính bù chẵn
Nền tảng để xây dựng khối của DES là sự kết hợp đơn giản của các kỹ
thuật thay thế và hoán vị bản rõ dựa trên khoá Đó là các vòng lặp DES sử
dụng 16 vòng lặp, nó áp dụng cùng một kiểu kết hợp của các kỹ thuật trên
khối bản rõ 16 lần
Trang 24Thuật toán chỉ sử dụng các phép toán số học và lôgíc trên các số 64 bít,
vì vậy nó dễ dàng thực hiện vào những năm 1970 trong điều kiện về công
nghệ phần cứng lúc bấy giờ Ban đầu, sự thực hiện các phần mềm kiểu này rất thô sơ, nhưng hiện tại thì việc đó đã tốt hơn, và với đặc tính lặp đi lặp lại của thuật toán đã tạo nên ý tưởng sử dụng chíp với mục đích đặc biệt này
Tóm lại DES có một số đặc điểm sau:
- Sử dụng khóa 56 bit
- Xử lý khối vào 64 bit, biến đổi khối vào thành khối ra 64 bit
- Mã hóa và giải mã được sử dụng cùng một khóa
- Des được thiết kế để chạy trên phần cứng
1.7.2 Mô tả thuật toán
Mô tả đầy đủ của DES được nêu trong Công bố số 46 về các chuẩn xử lý thông tin Liên bang (Mỹ) vào 15.1.1977 DES mã hoá một xâu bít x của bẳn rõ
độ dài 64 bằng một khoá 54 bít Bản mã nhậ được cũng là một xâu bít có độ dài
48 Trước hết ta mô tả ở mức cao của hệ thống
Thuật toán tiến hành theo 3 giai đoạn:
1.Với bản rõ cho trước x, một xâu bít x0 sẽ được xây dựng bằng cách hoán
vị các bít của x theo phép hoán vị cố định ban đầu IP Ta viết:x0= IP(X) = L0R0, trong đó L0 gồm 32 bít đầu và R0 là 32 bít cuối
2 Sau đó tính toán 16 lần lặp theo một hàm xác định Ta sẽ tính LiRi,
1 i 16 theo quy tắc sau:
Li = Ri-1
Ri = Li-1 f(Ri-1,Ki) trong đó kí hiệu phép hoặc loại trừ của hai xâu bít (cộng theo modulo 2) f là một hàm mà ta sẽ mô tả ở sau, còn K1,K2, ,K16 là các xâu bít độ dài 48 được tính như hàm của khoá K ( trên thực tế mỗi Ki là một phép chọn hoán vị bít trong K) K1, , K16 sẽ tạo thành bảng khoá Một vòng của phép mã hoá được
mô tả trên hình
3 Áp dụng phép hoán vị ngược IP-1 cho xâu bit R16L16, ta thu được bản
mã y tức là y=IP-1 (R16L16) Hãy chú ý thứ tự đã đảo của L16 và R16
Trang 25Một vòng của DES
Hàm f có hai biến vào: biến thứ nhất A là xâu bít độ dài 32, biến thứ hai là một xâu bít độ dài 48 Đầu ra của f là một xâu bít độ dài 32 Các bước sau được thực hiện:
1 Biến thứ nhất A được mở rộng thành một xâu bít độ dài 48 theo một hàm mở rộng cố định E E(A) gồm 32 bít của A (được hoán vị theo cách cố định) với 16 bít xuất hiện hai lần
2 Tính E(A) J và viết kết quả thành một chuỗi 8 xâu 6 bít =
B1B2B3B4B5B6B7B8
3 Bước tiếp theo dùng 8 bảng S1, S2, ,S8 ( được gọi là các hộp S ) Với mỗi Si là một bảng 416 cố định có các hàng là các số nguyên từ 0 đến 15 Với xâu bít có độ dài 6 (Kí hiệu Bi = b1b2b3b4b5b6), ta tính Sj(Bj) như sau: Hai bít b1b6xác định biểu diễn nhị phân của hàng r của Sj ( 0 r 3) và bốn bít (b2b3b4b5) xác định biểu diễn nhị phân của cột c của Sj ( 0 c 15 ) Khi đó Sj(Bj) sẽ xác định phần tử Sj(r,c); phần tử này viết dưới dạng nhị phân là một xâu bít có độ dài ( Bởi vậy, mỗi Sj có thể được coi là một hàm mã mà đầu vào là một xâu bít có
độ dài 2 và một xâu bít có độ dài 4, còn đầu ra là một xâu bít có độ dài 4) Bằng cách tương tự tính các Cj = Sj(Bj), 1 j 8
Trang 264 Xâu bít C = C1C2 C8 có độ dài 32 được hoán vị theo phép hoán vị cố định P Xâu kết quả là P(C) được xác định là f(A,J)
Hàm f được mô tả trong hình dưới Chủ yếu nó gồm một phép thế ( sử dụng hộp S ), tiếp sau đó là phép hoán vị P 16 phép lặp của f sẽ tạo nên một hệ mật tịch
Hàm f của DES
Hoán vị khởi đầu :
Hoán vị khởi đầu đổi chỗ khối dữ liệu vào, thay đổi vị trí của các bít trong khối dữ liệu vào, như được mô tả trong Bảng 1 Bảng này, và tất cả các bảng khác sau này, được đọc từ trái qua phải, từ trên xuống dưới Ví dụ, hoán
vị khởi đầu chuyển bít 1 thành bít 58, bít 2 thành bít 50, bít 3 thành bít 42,
Trang 27Bảng hoán vị khởi đầu
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
Hoán vị khởi đầu và tương ứng là hoán vị ngược không làm ảnh hưởng
đến sự an toàn của DES
Khóa chuyển đổi:
Đầu tiên, khoá 64 bít được giảm xuống thành một khoá 56 bít bằng
cách bỏ qua 8 bít chẵn lẻ Sự loại bỏ được thực hiện theo Bảng sau:
Bảng khóa chuyển đổi
Đầu tiên, khoá 56 bít được chia làm hai phần mỗi phần 28 bít Sau đó, các phần này được dịch trái một hoặc hai bít, phụ thuộc vào vòng đó Số bít được dịch được cho trong Bảng sau:
Bảng số bits dịch của một vòng
Sau khi được dịch, 48 bít được lựa chọn ra từ 56 bít Bởi vì sự thực
Trang 28hiện này đổi chỗ thứ tự các bít như là sự lựa chọn một tập con các bít, nó được gọi là hoán vị nén (compression permutation), hoặc hoán vị lựa chọn (permuted choice) Sự thực hiện này cung cấp một tập hợp các bít cùng cỡ với đầu ra của hoán vị mở rộng.Bảng 4 định nghĩa hoán vị nén (cũng gọi là hoán
vị lựa chọn) Ví dụ, bít ở vị trí 33 của khoá dịch được chuyển tới vị trí 35 của đầu ra, và bít ở vị trí 18 của khoá dịch bị bỏ qua
Ở thao tác này, nửa phải của dữ liệu, Ri, được mở rộng từ 32 bít thành
48 bít Bởi vì sự thực hiện này thay đổi thứ tự của các bít bằng cách lặp lại một bít nào đó, nó được hiểu như là một sự hoán vị mở rộng Sự thực hiện này nhằm mục đích tạo ra kết quả là dữ liệu cùng cỡ với khoá để thực hiện thao tác XOR
Định nghĩa hoán vị mở rộng - hộp E Với mỗi bộ 4 bít của khối dữ liệu vào, bít đầu tiên và bít thứ tư mỗi bít tương ứng với 2 bít của khối dữ liệu ra, trong khi bít thứ hai và bít thứ ba mỗi bít tương ứng với một bít của khối dữ liệu ra Bảng dưới mô tả vị trí của các bít trong khối dữ liệu ra theo khối dữ liệu vào Ví dụ, bít ở vị trí thứ 3 của khối dữ liệu vào được chuyển tới vị trí thứ 4 trong khối dữ liệu ra Và bít ở vị trí 21 của khối dữ liệu vào được
chuyển tới vị trí 30 và 32 trong khối dữ liệu ra
Trang 29Mặc dù khối dữ liệu ra rộng hơn khối dữ liệu vào, nhưng một khối dữ
liệu vào chỉ có duy nhất một khối dữ liệu ra
Hộp thay thế S :
Sau khi được nén, khoá được XOR với khối mở rộng, 48 bít kết quả được chuyển sang giai đoạn thay thế Sự thay thế được thực hiện bởi 8 hộp thay thế (substitution boxes, S-boxes) Khối 48 bít được chia thành 8 khối 6
Trang 30bít Mỗi khối được thực hiện trên một hộp S riêng biệt (separate S-box): khối
1 được thực hiện trên hộp S1, khối 2 được thực hiện trên hộp S2, , khối 8 được thực hiện trên hộp S8
Mỗi hộp S là một bảng gồm 4 hàng và 16 cột Mỗi phần tử của hộp là một số 4 bít Sáu bít vào hộp S sẽ xác định số hàng và số cột để tìm kết quả ra Bảng 6 biểu diễn 8 hộp S
Những bít vào xác định một phần tử trong hộp S một cách riêng biệt Sáu bít vào của hộp được ký hiệu là b1, b2, b3, b4, b5 và b6 Bít b1 và b6 được kết hợp thành một số 2 bít, nhận giá trị từ 0 đến 3, tương ứng với một hàng trong bảng Bốn bít ở giữa, từ b2 tới b5, được kết hợp thành một số 4 bít, nhận giá trị từ
0 đến 15, tương ứng với một cột trong bảng
Ví dụ, giả sử ta đưa dữ liệu vào hộp S thứ 6 (bít 31 tới bít 36 của hàm XOR) là
110010 Bít đầu tiên và bít cuối cùng kết hợp thành 10, tương ứng với hàng thứ 3 của hộp S thứ 6 Bốn bít giữa kết hợp thành 1001, tương ứng với cột thứ 10 của hộp S thứ 6 Phần tử hàng 3 cột 9 của hộp S thứ 6 là 0 Giá trị 0000 được thay thế cho 110010 Kết quả của sự thay thế là 8 khối 4 bít, và chúng được kết hợp lại thành một khối 32 bít Khối này được chuyển tới bước tiếp theo: hộp hoán vị P (Pbox permutation)
Trang 31Khối dữ liệu 32 bít ra của hộp thay thế S được hoán vị tiếp trong hộp P
Sự hoán vị này ánh xạ mỗi bít dữ liệu vào tới một vị trí trong khối dữ liệu ra; không bít nào được sử dụng hai lần và cũng không bít nào bị bỏ qua Nó được gọi là hoán vị trực tiếp (straight permutation) Bảng hoán vị cho ta vị trí của mỗi bí cần chuyển Ví dụ, bít 4 chuyển tới bít 21, trong khi bít 32 chuyển tới bít 4
Trang 32Cuối cùng ta mô tả việc tính toán bảng khóa từ khóa k trên thực tế, k là một xâu bit có độ dài 64, trong đó 56 bit là khóa và 8 bit để kiểm tra tính chẵn lẻ nhằm phát hiện sai Các bít ở các vị trí 8,16,…,64 được xác định sao cho mỗi byte chứa một số lẻ các số “1” Bởi vậy một sai sót đơn lẻ có thể phát hiện được trong mỗi nhóm 8 bit Các bit kiểm tra bị bỏ qua trong quá trình tính toán bảng khóa
1 Với một khóa K 64 bit cho trước, ta loại bỏ các bit kiểm tra tính chẵn lẻ
và hoán vị các bit còn lại cùa k theo phép hoán vị cố định PC-1
C 16 D 16 PC-2 K 16