BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Nguyễn Ngọc Điệp
NGHIÊN CỨU, XÂY DỰNG GIẢI PHÁP TÍCH HỢP MẬT MÃ VÀO QUÁ TRÌNH TRUYỀN TIN ĐẢM BẢO AN TOÀN THÔNG TIN TRÊN MẠNG MÁY TÍNH
LUẬN ÁN TIẾN SĨ KỸ THUẬT
Hà Nội - 2017
BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Nguyễn Ngọc Điệp
NGHIÊN CỨU, XÂY DỰNG GIẢI PHÁP TÍCH HỢP MẬT MÃ VÀO QUÁ TRÌNH TRUYỀN TIN ĐẢM BẢO AN TOÀN THÔNG TIN TRÊN MẠNG MÁY TÍNH
CHUYÊN NGÀNH: HỆ THỐNG THÔNG TIN
LUẬN ÁN TIẾN SĨ KỸ THUẬT
MÃ SỐ: 62.48.01.04
NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS.TS HOÀNG MINH
Hà Nội - 2017
ii
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 nội dung, số
liệu và kết quả nghiên cứu trình bày trong luận án là hoàn toàn trung thực và chưa có
tác giả nào công bố trong bất cứ một công trình nào khác, các dữ liệu tham khảo được
trích dẫn đầy đủ.
Người cam đoan Nguyễn Ngọc Điệp
i
LỜI CẢM ƠN
Luận án này được thực hiện tại Học viện Công nghệ Bưu chính Viễn thông - Bộ
Thông tin và Truyền thông.
Nghiên cứu sinh xin được bày tỏ lòng biết ơn sâu sắc đến Thầy giáo PGS. TS.
Hoàng Minh đã tận tình hướng dẫn, giúp đỡ, trang bị phương pháp nghiên cứu, kiến
thức khoa học để tôi hoàn thành các nội dung nghiên cứu của luận án.
Nghiên cứu sinh xin bày tỏ lòng biết ơn chân thành tới các thầy, cô của Học
viện Công nghệ Bưu chính Viễn thông, các nhà khoa học thuộc Viện Khoa học - Công
nghệ mật mã, Học viện Kỹ thuật mật mã đã đóng góp nhiều ý kiến quý báu giúp tôi
hoàn thành các nội dung nghiên cứu của luận án.
Nghiên cứu sinh xin trân trọng cảm ơn Học viện Công nghệ Bưu chính Viễn
thông, Khoa Khoa Quốc tế và Đào tạo Sau đại học là cơ sở đào tạo và đơn vị quản lý,
các đồng chí Lãnh đạo Viện Khoa học - Công nghệ mật mã, nơi tôi đang công tác đã
tạo điều kiện thuận lợi, hỗ trợ và giúp đỡ tôi trong suốt quá trình học tập, nghiên cứu
thực hiện luận án.
Tôi xin trân trọng cảm ơn các bạn bè người thân và gia đình đã cổ vũ, động viên
giúp đỡ, tạo điều kiện cho tôi hoàn thành luận án.
Nghiên cứu sinh
ii
MỤC LỤC
LỜI CAM ĐOAN ............................................................................................................ i
LỜI CẢM ƠN ................................................................................................................. ii
MỤC LỤC ...................................................................................................................... iii
DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT .................................................... vi
DANH MỤC CÁC HÌNH VẼ...................................................................................... viii
DANH MỤC CÁC BẢNG ............................................................................................. ix
MỞ ĐẦU .......................................................................................................................... 1
CHƯƠNG I: TỔNG QUAN VỀ GIẢI PHÁP CAN THIỆP MẬT MÃ VÀO HỆ THỐNG MẠNG DÙNG GIAO THỨC TCP/IP .............................................................. 7 1.1. TỔNG QUAN VỀ AN TOÀN THÔNG TIN TRÊN MẠNG .................................. 7 1.1.1. Một số khái niệm cơ bản về an toàn thông tin ....................................................... 7 1.1.2. Các nguy cơ mất an toàn thông tin ......................................................................... 8 1.1.3. Các hình thức tấn công thông tin trên mạng .......................................................... 8 1.1.4. Một số biện pháp an toàn ..................................................................................... 10 1.1.5. Các dịch vụ an toàn .............................................................................................. 10 1.1.5.1. Dịch vụ bí mật ................................................................................................... 11 1.1.5.2. Dịch vụ xác thực ................................................................................................ 12 1.1.5.3. Dịch vụ toàn vẹn dữ liệu. .................................................................................. 13 1.1.5.4. Dịch vụ không thể chối bỏ ................................................................................. 14 1.1.5.5. Dịch vụ kiểm soát truy nhập ............................................................................. 14 1.2. TÍCH HỢP MẬT MÃ VÀO HỆ THỐNG MẠNG DÙNG GIAO THỨC TCP/IP 15 1.2.1. Cấu trúc giao thức TCP/IP ................................................................................... 15 1.2.2. Tích hợp mật mã vào các tầng của giao thức TCP/IP .......................................... 17 1.2.2.1. Tích hợp mật mã vào tầng ứng dụng ................................................................ 19 1.2.2.2. Tích hợp mật mã vào tầng vận tải ..................................................................... 20 1.2.2.3. Tích hợp mật mã vào tầng Internet ................................................................... 21 1.2.2.4. Tích hợp mật mã vào tầng truy nhập mạng ...................................................... 22 1.2.3. Cài đặt các dịch vụ an toàn dùng kỹ thuật mật mã .............................................. 22 1.3. GIẢI PHÁP BẢO MẬT DỮ LIỆU TRÊN ĐƯỜNG TRUYỀN ............................ 27 1.3.1. Một số chuẩn về an toàn và bảo mật thông tin..................................................... 27 1.3.2. Chuẩn về an toàn tầng vận tải SSL/TLS .............................................................. 31 1.3.2.1. Giới thiệu bộ giao thức ..................................................................................... 31 1.3.2.2. Các thành phần trong giao thức SSL ................................................................ 31 1.3.3. Một số tấn công cơ bản đối với giao thức SSL .................................................... 34 1.3.3.1. Tấn công quay lui phiên bản, quay lui thuật toán mã hóa. .............................. 34
iii
1.3.3.2. Tấn công làm mất thông điệp ChangeCipherSpec............................................ 35 1.3.3.3. Tấn công quay lui thuật toán trao đổi khoá ...................................................... 36 1.3.3.4. Tấn công padding CBC ..................................................................................... 37 1.3.3.5. Lỗ hổng HeartBleed trong OpenSSL ................................................................ 38 1.3.4. Giải pháp tích hợp mật mã nâng cao độ an toàn và hiệu quả cho bộ giao thức SSL/TLS ......................................................................................................................... 40 KẾT LUẬN CHƯƠNG 1 ............................................................................................... 42
CHƯƠNG II: NÂNG CAO HIỆU QUẢ THỰC THI, ĐỘ AN TOÀN CỦA CÁC THAM SỐ HỆ MẬT RSA VÀ THUẬT TOÁN MÃ KHỐI ......................................... 44 2.1. GIỚI THIỆU CHUNG ............................................................................................ 44 2.2. XÂY DỰNG TIÊU CHUẨN THAM SỐ CHO HỆ MẬT RSA ............................ 46 2.2.1. Một số tiêu chuẩn tham số RSA an toàn đã được công bố .................................. 47 2.2.2. Phương pháp xác định ngưỡng an toàn của Lenstra và Verheul ......................... 49 2.2.2.1. Ngưỡng an toàn ................................................................................................. 49 2.2.2.2. Độ dài modulo của hệ mật RSA ........................................................................ 50 2.2.2.3. Bảng tính ngưỡng an toàn và độ dài modulo an toàn cho hệ mật RSA ............ 51 2.2.3. Xác định ngưỡng an toàn theo quan điểm riêng .................................................. 51 2.2.3.1. Luận cứ xác định đối tượng tấn công ............................................................... 51 2.2.3.2. Công thức xác định các ngưỡng an toàn cho đến năm y (y2016) .................. 52 2.2.4. Phương pháp mã hóa liên tiếp và tiêu chuẩn cho số công khai ........................... 55 2.2.4.1. Một số công thức, định nghĩa ............................................................................ 55 2.2.4.2. Giải bài toán RSA bằng phương pháp mã hóa liên tiếp ................................... 56 2.2.4.3. Phân tích modulo n của hệ RSA bằng phương pháp mã hóa liên tiếp ............. 57 2.2.4.4. Tiêu chuẩn cho tham số e .................................................................................. 59 2.3. MỘT ĐỀ XUẤT MA TRẬN AN TOÀN, HIỆU QUẢ CHO TẦNG TUYẾN TÍNH TRONG CÁC MÃ PHÁP DẠNG AES .............................................................. 61 2.3.1. Một số định nghĩa, khái niệm ............................................................................... 63 2.3.2. Phép MixColumns sử dụng ma trận dịch vòng và ma trận tựa vòng 4x4 ............ 64 2.3.3. Phân tích phép biến đổi MixColumns của AES ................................................... 66 2.3.4. Đề xuất ma trận tuyến tính tựa vòng cho AES .................................................... 68 2.3.5. Đánh giá cài đặt theo quan điểm phần mềm ........................................................ 71 2.3.6. Đánh giá về độ an toàn, số điểm bất động của tầng tuyến tính ............................ 74 2.3.7. Kết quả cài đặt thực nghiệm ................................................................................. 76 KẾT LUẬN CHƯƠNG 2 ............................................................................................... 79
CHƯƠNG III: TÍCH HỢP MẬT MÃ TRONG GIAO THỨC VÀ BỘ PHẦN MỀM BẢO MẬT DỮ LIỆU TRÊN ĐƯỜNG TRUYỀN ........................................................ 81 3.1. BỘ PHẦN MỀM OPENVPN ................................................................................. 81 3.1.1. Giới thiệu bộ phần mềm OpenVPN ..................................................................... 81 3.1.2. Sơ đồ tổng quát .................................................................................................... 82 3.1.3. Sơ đồ dòng dữ liệu ............................................................................................... 83
iv
3.2. MỘT SỐ MODULE CHÍNH TRONG BỘ PHẦN MỀM ...................................... 85 3.2.1. Module VPN Daemon - Vận hành VPN theo cơ chế dịch vụ hệ thống ............... 85 3.2.2. Module TUN/TAP - quản lý giao diện mạng ảo .................................................. 87 3.2.3. Trao đổi khoá trong OpenVPN ............................................................................ 89 3.2.4. Mã hoá trong OpenVPN....................................................................................... 90 3.2.5. Xác thực tính toàn vẹn gói dữ liệu trong OpenVPN ............................................ 90 3.2.6. Giao thức trong OpenVPN ................................................................................... 91 3.3. TÍCH HỢP THAM SỐ RSA AN TOÀN VÀ THUẬT TOÁN MÃ KHỐI BC_VPN TRONG GIAO THỨC SSL/TLS. ................................................................. 93 3.3.1. Sử dụng tham số RSA an toàn trong giao thức SSL/TLS .................................... 94 3.3.2. Tích hợp thuật toán mã khối BC_VPN vào trong bộ giao thức SSL/TLS. .......... 98 3.3.3. Thử nghiệm, đánh giá bộ phần mềm bảo mật đường truyền PMBM_VPN. ..... 100 KẾT LUẬN CHƯƠNG III........................................................................................... 105
KẾT LUẬN .................................................................................................................. 107 A. Các kết quả Luận án đã đạt được: ........................................................................... 107 B. Những đóng góp mới của luận án: .......................................................................... 108 C. Hướng nghiên cứu tiếp theo: ................................................................................... 108
DANH MỤC CÁC CÔNG TRÌNH KHOA HỌC ĐÃ CÔNG BỐ ............................. 109
TÀI LIỆU THAM KHẢO ............................................................................................ 110
PHỤ LỤC: CÁC MODULE CHƯƠNG TRÌNH, KẾT QUẢ THỬ NGHIỆM .......... 115
v
DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT
Lực lượng của a Lực lượng của b
#(a) #(b) #{(X,Y)} Lực lượng của tập X, Y #S
Số các phần tử của S Vành số nguyên với phép cộng và phép nhân rút gọn theo modulo N
Gcd(a,b) Ước số chung lớn nhất của a và b Lmc(a,b) Bội số chung nhỏ nhất của a và b AES ACL DLP DoS DDoS Advanced Encryption Standard Access Control List Discrete Logarithm Problem Denial of Service Distributed Denial of Service
Nhóm nhân cực đại của của vành N là bội của e, còn e là ước của N Chuẩn mã hóa dữ liệu mở rộng Danh sách điều khiển truy nhập Bài toán Logarith rời rạc Tấn công từ chối dịch vụ Tấn công từ chối dịch vụ phân tán Hệ mật Elliptic Đóng gói mã hóa dữ liệu
ECC ESP FPGA HMAC Hàm băm có xác thực
KDF IKE IDPS Elliptic Curve Cryptosystem Encapsulating Security Payload Field Programmable Gate Array Mảng cổng lập trình dạng trường Hash Message Authentication Code Key Derivation Function Internet Key Exchange Intruction Detection Prevention System
Hàm dẫn xuất khóa Trao đổi khóa trên Internet Hệ thống phát hiện và ngăn chặn truy cập Giao thức liên mạng Giao thức bảo mật IP Tổ chức tiêu chuẩn quốc tế IP IPSec ISO
Internet Protocol Internet Protocol Security International Organization for Standardization Local Area Network Maximum Distance Separable Man In The Middle Multi Protocol Label Switching Open System Interconnection
LAN MDS MITM MPLS OSI
Quality Of Service Mạng cục bộ Phân tách có khoảng cách cực đại Tấn công kẻ đứng giữa Chuyển mạch nhãn đa giao thức Mô hình tương tác giữa các hệ thống mở. Chất lượng dịch vụ
QoS
vi
SPN Mạng thay thế - hoán vị
Substitution Permutation Network Secure Sockets Layer Rivest, Shamir and Adlemen Transport Control Protocol Transport Layer Security User Datagram Protocol Virtual Networking Interface Virtual Private Network Giao thức bảo mật tầng Socket Hệ mật khóa công khai RSA Giao thức điều khiển truyền tin Giao thức bảo mật tầng vận tải Giao thức gói dữ liệu người dùng Giao diện mạng ảo Mạng riêng ảo
SSL RSA TCP TLS UDP VNI VPN
vii
DANH MỤC CÁC HÌNH VẼ
Hình 1.1: Các hình thức tấn công thông tin trên mạng máy tính ................................... 9
Hình 1.2: Cấu trúc của giao thức TCP/IP .................................................................... 16
Hình 1.3: Cấu trúc gói tin IP ........................................................................................ 17
Hình 1.4: Mô hình bảo mật thông tin dùng kỹ thuật mật mã ........................................ 23
Hình 1.5: Mô hình mã hóa khóa đối xứng .................................................................... 24
Hình 1.6: Mô hình mã hoá dùng khoá công khai .......................................................... 25
Hình 1.7: Giao thức bắt tay SSL ................................................................................... 32
Hình 1.8: Giao thức bản ghi SSL .................................................................................. 33
Hình 1.9: Tấn công ChangeCipherSpec ....................................................................... 35
Hình 1.10: Tấn công quay lui thuật toán trao đổi khóa ............................................... 37
Hình 3.1: Sơ đồ khối tổng quát của OpenVPN ............................................................. 82
Hình 3.2: Sơ đồ dòng dữ liệu được tương tác xử lý trong OpenVPN ........................... 84
Hình 3.3: Sơ đồ khối của VPN Daemon ....................................................................... 86
Hình 3.4: Sơ đồ khối hoạt động của module TUN/TAP ................................................ 88
Hình 3.5: Lưu đồ mã hoá và xác thực của OpenVPN ................................................... 91
Hình 3.6: Lưu đồ giải mã và xác thực trong OpenVPN ............................................... 91
Hình 3.7: UDP/TCP Format ......................................................................................... 92
Hình 3.8: Tích hợp tham số RSA và thuật toán mã khối trong OpenVPN .................... 93
Hình 3.9: Lưu đồ mã hoá và xác thực gói tin trong PMBM_VPN ............................... 98
Hình 3.10: Lưu đồ giải mã và xác thực gói tin trong PMBM_VPN ............................. 99
Hình 3.11: Đóng gói và bảo vệ gói tin IP trong PMBM_VPN ..................................... 99
Hình 3.12: Mô hình thử nghiệm phần mềm PMBM_VPN .......................................... 100
Hình 3.13: Cấu hình cho VPN Server ......................................................................... 102
Hình 3.14: Cấu hình cho VPN Client ......................................................................... 102
Hình 3.15: Trạng thái hiện thời của hệ thống VPN đã kết nối thành công ................ 103
Hình 3.16: Tốc độ của phần mềm PMBM_VPN (1 luồng) ......................................... 104
Hình 3.17: Tốc độ của phần mềm PMBM_VPN (4 luồng) ......................................... 104
viii
DANH MỤC CÁC BẢNG
Bảng 1.1. Bảo vệ các thành phần của gói IP trong giao thức TCP/IP
18
Bảng 1.2. Các dịch vụ an toàn được cài đặt tại các tầng trong giao thức 18
TCP/IP
Bảng 2.1. Bảng tính a(y) và n(y) cho lĩnh vực kinh tế - xã hội 51
của Lenstra và Verheul
Bảng 2.2. Bảng tính các giá trị a(y) và n(y) cho lĩnh vực kinh tế - xã hội 54
Bảng 2.3. Bảng tính các giá trị ngưỡng an toàn theo các phương pháp 54
70 Bảng 2.4. Danh sách 16 đa thức nguyên thủy bậc 8 trên
Bảng 2.5. So sánh cài đặt kiểu bit-slice các ma trận MDS 4x4 74
Bảng 2.6. Kết quả cài đặt thực nghiệm thuật toán cho 1 vòng mã hóa 76
Bảng 2.7. Kết quả cài đặt thực nghiệm tốc độ mã hóa của BC_VPN 77
Bảng 2.8. Số lượng S-hộp tích cực vi sai và độ phức tạp trước thám mã vi 78
sai của AES và BC_VPN
Bảng 2.9. Số lượng S-hộp tích cực vi sai và độ phức tạp trước thám mã 79
tuyến tínhcủa AES và BC_VPN
105 Bảng 3.1. So sánh tốc độ từ PMBM_VPN client đến PMBM_VPN server
ix
MỞ ĐẦU
1.1 Tính cấp thiết của đề tài luận án
Mạng máy tính là một hệ thống mở bao gồm nhiều máy tính và các thiết bị
được kết nối với nhau nhằm chia sẻ tài nguyên chung và liên lạc với nhau. Mạng
máy tính đã kết hợp được khả năng xử lý thông tin của các máy tính đơn lẻ và chức
năng truyền thông. Các mạng máy tính ở Việt nam hiện nay chủ yếu là các mạng sử
dụng hệ điều hành Windows, Linux, Unix với bộ giao thức truyền thông TCP/IP.
Sự phát triển bùng nổ của Internet đã tạo điều kiện cho các loại hình xâm
nhập trái phép vào các hệ thống công nghệ thông tin cả về chiều rộng (lây lan trên
quy mô toàn thế giới) lẫn chiều sâu (can thiệp vào hạt nhân hệ thống đích). Mỗi
ngày, các hệ thống mạng phải đối phó với hàng loạt đợt tấn công của tin tặc, khiến
nhiều hệ thống bị đình trệ, tắc nghẽn và tê liệt, gây ra những tổn hại to lớn. Các
phương thức tấn công ngày càng tinh vi, phức tạp có thể dẫn đến mất mát, sai lệch
thông tin, thậm chí có thể làn sụp đổ hoàn toàn hệ thống thông tin của các cơ quan
chính phủ, các ngân hàng, doanh nghiệp. Trong quá trình đẩy mạnh ứng dụng, phát
triển công nghệ thông tin, hội nhập quốc tế, với sự phát triển nhanh chóng của các
mạng thông tin truyền thông, các hệ thống thông tin phân tán và đặc biệt là mạng
thông tin toàn cầu Internet thì nhu cầu đảm bảo an ninh an toàn thông tin càng trở
lên cấp thiết. An toàn thông tin một vấn đề vừa mang tính thời sự, vừa mang tính
thách thức không chỉ đối với các chuyên gia tin học mà còn đối với sự phát triển của
các hệ thống thông tin toàn cầu.
Đã từ lâu vấn đề bảo mật thông tin là một công việc quan trọng đối với mọi
Quốc gia, nó nhằm mục đích giữ cho thông tin được an toàn bằng kỹ thuật mật mã.
Khi chưa có mạng máy tính, thông tin được lưu trữ trên các máy tính được bảo vệ
chủ yếu bằng các biện pháp vật lý, nghiệp vụ. Các thông tin cần giữ bí mật sẽ được
mã hóa trước khi truyền trên kênh công khai. Khi các máy tính được kết nối với
nhau thành mạng, do nhu cầu sử dụng tài nguyên chung và liên lạc với nhau, các
thông tin trên mỗi máy tính dễ dàng bị truy nhập từ một máy tính khác. Đồng thời,
1
các thông tin trao đổi trên môi trường mạng cũng dễ dàng bị đánh cắp, sửa đổi, giả
mạo [51], [53], [62], [63].
An toàn mạng máy tính là tổng thể các giải pháp về mặt tổ chức và kỹ thuật
nhằm ngăn cản mọi nguy cơ làm tổn hại đến hệ thống mạng. Sự cần thiết phải hội
nhập các dịch vụ vào cùng một hạ tầng cơ sở mạng thống nhất (tất cả trong một) là
một xu thế tất yếu. Các nhà quản lý, cung cấp dịch vụ mạng cố gắng triển khai
những công nghệ mới nhất vào hạ tầng cơ sở mạng của mình, an ninh mạng trở
thành một chức năng then chốt trong việc xây dựng và duy trì các mạng hiện đại
của mọi tổ chức. Các nguyên tắc nền tảng để xây dựng hệ thống mạng an toàn bao
gồm: tính bí mật, tính toàn vẹn, tính sẵn sàng [7], [8], [26], [49], [53]. Tùy thuộc
vào từng ứng dụng, dịch vụ và hoàn cảnh cụ thể, mà các nguyên tắc này sẽ được
xác định mức độ quan trọng khác nhau.
Vấn đề bảo vệ thông tin bằng mật mã đã và đang được nhiều quốc gia trên
thế giới đặc biệt quan tâm, đã có rất nhiều các nghiên cứu tạo ra các chuẩn bảo mật,
các hệ mật và các giải pháp bảo mật cho hệ thống mạng. Song theo quan điểm mật
mã, chúng ta không thể sử dụng các sản phẩm bảo mật thông tin của nước ngoài để
bảo mật thông tin trên mạng thuộc phạm vi bí mật Nhà nước như: lĩnh vực An ninh
Quốc phòng. Vấn đề đặt ra là chúng ta phải chủ động tạo ra các sản phẩm bảo mật
thông tin trên mạng máy tính, với các module mật mã kiểm soát hoàn toàn và độ an
toàn của sản phẩm do các module mật mã quyết định.
Nhận thấy sự cấp thiết, tính thời sự của lĩnh vực an toàn, bảo mật thông tin
trên mạng máy tính và nhu cầu thực tế công tác, nghiên cứu sinh đã lựa chọn luận
án: “Nghiên cứu, xây dựng giải pháp tích hợp mật mã vào quá trình truyền tin
đảm bảo an toàn thông tin trên mạng máy tính”.
1.2 Mục tiêu nghiên cứu
Bảo vệ thông tin trên kênh truyền công khai là chức năng chính của bài toán
tích hợp mật mã để bảo mật thông tin trên mạng. Cốt lõi của quá trình này là can
thiệp kỹ thuật mật mã nhằm mã hóa và giải mã các thông tin cần bảo vệ.
2
Mục tiêu chính của Luận án là:
- Nghiên cứu, lựa chọn giải pháp tích hợp mật mã vào mô hình mạng TCP/IP
để bảo mật dữ liệu trên đường truyền.
- Nghiên cứu đề xuất giải pháp nâng cao tính an ninh, an toàn và hiệu quả
thực thi các thuật toán mật mã trong bảo mật thông tin trên mạng.
1.3 Đối tượng nghiên cứu
Mô hình, hệ thống mạng sử dụng bộ giao thức TCP/IP cần bảo đảm an ninh,
an toàn. Các chuẩn giao thức bảo mật mạng, tập trung vào các giải pháp mật mã và
khả năng tích hợp các thành tố mật mã vào bộ giao thức SSL/TLS để bảo mật dữ
liệu trên đường truyền.
1.4 Phạm vi nghiên cứu
- Luận án tập trung vào nghiên cứu, lựa chọn giải pháp tích hợp mật mã vào
giao thức bảo mật dữ liệu trên đường truyền trong mô hình mạng TCP/IP.
- Nghiên cứu đề xuất giải pháp nâng cao hiệu quả thực thi, độ an toàn của giao
thức SSL/TLS, hệ mật RSA và thuật toán mã hóa dữ liệu cho bài toán bảo
mật dữ liệu trên đường truyền.
1.5 Cách tiếp cận và phương pháp nghiên cứu
- Tổng hợp các kết quả nghiên cứu mới, các giải pháp về an toàn và bảo mật
thông tin trên các máy tính và trên hệ thống mạng.
- Trên cơ sở kiến trúc an ninh chung của mô hình OSI, các giao thức bảo mật
mạng, thông qua khảo sát, phân tích, đánh giá các kết quả đã nghiên cứu từ
đó đề xuất giải pháp nâng cao hiệu quả bảo mật dữ liệu trên đường truyền.
- Dựa trên phương pháp phân tích lý thuyết (sử dụng lý thuyết và kỹ thuật mật
mã hiện đại), tính toán giải tích, chứng minh bằng toán học và kiểm chứng
thông qua việc cài đặt, thử nghiệm thực tế để chứng minh tính đúng đắn,
hiệu quả của các kết quả nghiên cứu.
3
1.6 Nội dung nghiên cứu
- Nghiên cứu, lựa chọn giải pháp tích hợp mật mã vào giao thức bảo mật dữ
liệu trên đường truyền trong mô hình mạng TCP/IP để bảo mật thông tin trên
mạng. Phân tích cấu trúc giao thức SSL/TLS, các điểm yếu an ninh và một
số tấn công cơ bản dựa trên các điểm yếu còn tồn tại của bộ giao thức.
- Nghiên cứu đề xuất giải pháp để nâng cao hiệu quả thực thi các thuật toán
mật mã, đảm bảo hiệu quả về tốc độ, độ an toàn và bảo mật cho bài toán bảo
mật dữ liệu trên đường truyền.
- Thiết kế và xây dựng bộ chương trình thử nghiệm giải pháp bảo mật dữ liệu
trên đường truyền với thuật toán mã khối và tham số mật mã được nghiên
cứu đề xuất.
- Thử nghiệm, đánh giá độ an toàn và hiệu quả của bộ chương trình bảo mật
dữ liệu trên đường truyền.
1.7 Ý nghĩa khoa học và thực tiễn
- Ý nghĩa khoa học: Quá trình nghiên cứu luận án sẽ cho thấy rõ cơ sở khoa
học của việc nghiên cứu, đề xuất cải tiến thuật toán mật mã và ứng dụng một
số nguyên thủy mật mã vào bài toán bảo mật thông tin trên đường truyền.
- Ý nghĩa thực tiễn: Cải tiến, nâng cao tốc độ tính toán, hiệu năng thực thi các
thuật toán mật mã đảm bảo tính hiệu quả, giảm thời gian tính toán và tài
nguyên của hệ thống đồng thời tăng cường tính an toàn, bảo mật cho bộ giao
thức SSL/TLS đáp ứng bài toán bảo mật dữ liệu trên đường truyền.
Giải pháp tích hợp mật mã để bảo mật thông tin trên đường truyền của luận
án cho phép chúng ta xây dựng các mạng cục bộ, mạng diện rộng có độ an toàn cao
dựa trên kênh truyền Internet và các mạng công cộng khác. Hơn nữa, giải pháp này
cho phép ta bảo mật được cơ bản các ứng dụng, dịch vụ truyền tin trên mạng dùng
giao thức TCP/IP bao gồm cả hình ảnh động, âm thanh mà không can thiệp vào cấu
trúc của ứng dụng. Điều này đã giải quyết được yêu cầu thực tế ở Việt Nam, có rất
nhiều ứng dụng cần được bảo vệ thông tin nhưng chúng ta không được can thiệp
mật mã vào cấu trúc của nó.
4
1.8 Giới thiệu bố cục của luận án
Bố cục của luận án gồm Lời nói đầu, 3 chương nội dung, phần Kết luận, Danh
mục các công trình, bài báo khoa học đã công bố của nghiên cứu sinh và phần Phụ
lục của luận án.
Phần mở đầu: Phân tích tình hình hiện tại, tính cấp thiết của vấn đề nghiên cứu
và đề xuất nhiệm vụ nghiên cứu.
Chương 1: Tổng quan về giải pháp can thiệp mật mã vào hệ thống mạng dùng
giao thức TCP/IP.
Chương này hệ thống hóa các khái niệm cơ bản về an ninh an toàn trên mạng
máy tính. Phân tích bộ giao thức TCP/IP và khả năng tích hợp mật mã vào các tầng
trong mô hình giao thức TCP/IP để bảo mật thông tin;
Phân tích bộ giao thức SSL/TLS, các thành phần cơ bản trong bộ giao thức,
chỉ ra những điểm yếu mất an ninh, an toàn trong giao thức và những giải pháp khắc
phục. Xác định rõ vai trò của hệ mật RSA và thuật toán mã khối trong giao thức
SSL/TLS để xây dựng ứng dụng bảo mật dữ liệu trên đường truyền.
Chương 2: Nâng cao hiệu quả thực thi, độ an toàn của các tham số hệ mật
RSA và thuật toán mã khối.
Trong chương này, luận án trình bày một số kết quả nghiên cứu đề xuất mới
về tiêu chuẩn số mũ công khai trong hệ mật RSA trong lĩnh vực kinh tế - xã hội và
thuật toán mã hóa dữ liệu định hướng cho ứng dụng bảo mật dữ liệu trên đường
truyền.
- Thứ nhất, luận án đưa ra một tiêu chuẩn mới đối với số mũ công khai trong hệ
mật RSA (kết quả nghiên cứu được đăng trong bài báo số 05) và cập nhật bổ
sung giả thiết xác định độ dài modulo an toàn.
- Thứ hai, luận án nghiên cứu đề xuất được ma trận an toàn và cài đặt hiệu quả
dựa trên ma trận tựa vòng cho tầng tuyến tính trong các mã khối dạng AES
(kết quả nghiên cứu được đăng trong bài báo số 06).
Chương 3: Tích hợp mật mã trong giao thức và bộ phần mềm bảo mật dữ liệu
trên đường truyền.
5
Chương 3 tập trung phân tích mô hình, cấu trúc hoạt động của bộ phần mềm
OpenVPN. Kiểm soát và từng bước làm chủ bộ phần mềm mã nguồn mở. Thực hiện
các giải pháp tích hợp mật mã vào các thành phần trong bộ phần mềm OpenVPN.
- Cài đặt, tích hợp bộ tham số an toàn của hệ mật RSA vào quá trình xác thực,
trao đổi khóa trong bộ giao thức SSL/TLS.
- Xây dựng bộ phần mềm thử nghiệm bảo mật đường truyền dựa trên công nghệ
OpenVPN có tích hợp các tham số và thuật toán mã khối an toàn, hiệu quả
khắc phục được một số điểm yếu của bộ giao thức SSL/TLS đã phân tích; Thử
nghiệm và đánh giá tính an ninh an toàn và hiệu năng của bộ phần mềm.
Phần kết luận: Trình bày những kết quả nghiên cứu chính của luận án, nêu bật
các đóng góp mới của luận án và định hướng nghiên cứu tiếp theo.
Phần Phụ lục: Trình bày một số kết quả cài đặt, thử nghiệm thuật toán tích
hợp vào bộ phần mềm bảo mật dữ liệu trên đường truyền.
6
CHƯƠNG I: TỔNG QUAN VỀ GIẢI PHÁP CAN THIỆP MẬT MÃ VÀO HỆ THỐNG MẠNG DÙNG GIAO THỨC TCP/IP
Xây dựng các hệ thống bảo mật thông tin trên mạng máy tính đòi hỏi một giải
pháp tổng thể bao gồm nhiều cơ chế an toàn như điều khiển truy nhập, mã hóa dữ
liệu, chữ ký số, xác thực, bảo vệ vật lý [8], [26], [49], [53],... Kỹ thuật mật mã đóng
một vai trò rất quan trọng trong việc bảo vệ thông tin trên mạng, nó cho phép chúng
ta cài đặt hầu hết các dịch vụ an toàn bao gồm các dịch vụ bí mật, xác thực, toàn
vẹn và không thể chối bỏ. Ngoài ra nó góp phần quan trọng trong việc cài đặt dịch
vụ điều khiển truy nhập.
1.1. TỔNG QUAN VỀ AN TOÀN THÔNG TIN TRÊN MẠNG
1.1.1. Một số khái niệm cơ bản về an toàn thông tin
Trong hoạt động xã hội, thông tin được thể hiện dưới nhiều hình thức khác
nhau như văn bản, hình ảnh, âm thanh. Trên mạng máy tính, thông tin được lưu trữ
trong các thiết bị vật lý như ổ đĩa, thẻ nhớ…hoặc được truyền qua kênh công khai.
Những thông tin có giá trị luôn luôn chịu những mối đe dọa của những người không
được ủy quyền. Họ có thể là những kẻ tấn công bất hợp pháp hoặc những người
trong nội bộ cơ quan, tổ chức có thông tin cần bảo vệ. Khái niệm “An toàn thông
tin” (Information security) chỉ ra các yêu cầu đối với việc bảo vệ thông tin bao gồm:
- Tính bí mật (Confidentality): Đảm bảo rằng thông tin không bị lộ hoặc bị
khám phá bởi những người không được ủy quyền.
- Tính xác thực (Authentication): Đảm bảo rằng người gửi và người nhận
thông tin không bị mạo danh.
- Tính toàn vẹn (Integrity): Đảm bảo rằng thông tin không bị thay đổi hoặc bị
phá hủy bởi những người không được ủy quyền.
- Tính sẵn sàng (Availibility): Đảm bảo rằng những người hợp pháp không bị
từ chối truy nhập một cách không chính đáng tới thông tin và tài nguyên.
Một mối đe doạ (threat) là một người, một vật, một sự kiện, hay một ý định
gây ra một số nguy hiểm đối với tài nguyên, dưới dạng tính bí mật, toàn vẹn, sự khả
dụng, hoặc tính sử dụng hợp pháp của tài nguyên. Một cuộc tấn công (attack) là thể
7
hiện thực tế của một mối đe doạ. Các biện pháp bảo vệ (safeguard) là các điều khiển
vật lý, các cơ chế, các chính sách và các thủ tục bảo vệ các tài nguyên khỏi các mối
đe doạ. Những điểm có thể bị tổn thương (vulnerability) là những điểm yếu trong
một cách bảo vệ, hay nơi thiếu sự bảo vệ.
Sự rủi ro (risk) là độ đo đánh giá tính dễ bị tổn thương thực sự kết hợp với
khả năng tấn công thành công. Độ rủi ro cao nếu giá trị của tài sản có thể bị tổn
thương cao, và khả năng tấn công thành công cao. Ngược lại, độ rủi ro thấp nếu giá
trị của tài sản có thể bị tổn thương thấp, và khả năng tấn công thành công thấp. Việc
phân tích độ rủi ro có thể cung cấp một cách định lượng để xác định xem chi phí
trong các cách bảo vệ có được đảm bảo hay không.
1.1.2. Các nguy cơ mất an toàn thông tin
Do hoạt động trong môi trường mở và phân tán, thông tin được lưu thông rộng khắp và dưới rất nhiều hình thức nên mạng máy tính phải chịu nhiều mối đe doạ từ nhiều phía. Các mối đe doạ chủ yếu trực tiếp bao gồm:
- Sự rò rỉ thông tin: Thông tin bị lộ hoặc bị khám phá do một người hoặc thực
thể được phép. Điều này có thể liên quan đến những tấn công trực tiếp, chẳng
hạn nghe trộm hoặc những kiểu theo dõi thông tin tinh tế hơn.
- Vi phạm tính toàn vẹn: Tính nhất quán của dữ liệu bị tổn thương thông qua
việc tạo, thay đổi trái phép hay phá hoại dữ liệu.
- Từ chối dịch vụ: Việc truy nhập thông tin hoặc các tài nguyên khác bị cản trở
một cách có chủ tâm.
- Sử dụng trái phép: Một tài nguyên được sử dụng bởi một người không có
quyền hoặc theo một cách không được phép.
1.1.3. Các hình thức tấn công thông tin trên mạng
Hình 1.1 minh họa luồng thông tin được truyền từ nơi gửi (nguồn thông tin)
đến nơi nhận (đích thông tin). Trên đường truyền công khai thông tin bị tấn công
bởi những người không được ủy quyền nhận tin, ta gọi là kẻ tấn công. Theo [53] các
hình thức tấn công thông tin trên mạng được chia làm 4 loại cơ bản sau:
8
Nguồn thông tin
Đích thông tin
(a) Luồng bình thường
Nguồn thông tin
Nguồn thông tin
Đích thông tin
Đích thông tin
(c) Chặn bắt thông tin
(b) Ngăn chặn thông tin
Nguồn thông tin
Đích thông tin
Đích thông tin
(d) Thay đổi thông tin
(e) Chèn thông tin giả
Nguồn thông tin
Hình 1.1: Các hình thức tấn công thông tin trên mạng máy tính
- Ngăn chặn thông tin (Interruption): Tài nguyên thông tin bị phá hủy, không
sẵn sàng phục vụ hoặc không sử dụng được. Đây là hình thức tấn công làm
mất khả năng sẵn sàng phục vụ của thông tin.
- Chặn bắt thông tin (Interception): Kẻ tấn công có thể truy nhập tới tài nguyên
thông tin. Đây là hình thức tấn công vào tính bí mật của thông tin.
- Sửa đổi thông tin (Modification): Kẻ tấn công truy nhập, chỉnh sửa thông tin
trên mạng. Đây là hình thức tấn công lên tính toàn vẹn của thông tin
- Chèn thông tin giả (Fabrication): Kẻ tấn công chèn thông tin và dữ liệu giả
vào hệ thống. Đây là hình thức tấn công lên tính xác thực của thông tin. Nó
có thể là việc chèn các thông báo giả mạo vào mạng hay thêm các bản ghi
vào mạng hay các bản ghi vào tệp tin.
9
1.1.4. Một số biện pháp an toàn
Có một số biện pháp bảo vệ chống đe doạ như sau:
- An toàn truyền thông: là bảo vệ thông tin trong khi nó được truyền từ hệ
thống này sang hệ thống khác.
- An toàn máy tính: là bảo vệ thông tin trong một hệ thống máy tính, nó bao
gồm các lớp con như là an toàn hệ điều hành và an toàn cơ sở dữ liệu.
- An toàn vật lý: an toàn các khoá hoặc các điều khiển truy nhập vật lý khác;
ngăn cản phá rối thiết bị nhạy cảm; điều khiển môi trường.
- An toàn nhân sự: nhận dạng vị trí nhạy cảm; các tiến trình bảo vệ nhân viên;
đào tạo và nhận thức về an toàn.
- An toàn hành chính: quản lý nhập khẩu phần mềm nước ngoài; các thủ tục
thẩm tra sự vi phạm luật lệ an toàn.
- An toàn môi trường: bảo vệ nơi lưu trữ thông tin; kiểm tra việc ghi dấu, sao
chép, và sự phá hoại thông tin nhạy cảm.
- An toàn nguồn phát: kiểm soát tần số radio (RF) và các nguồn phát tín hiệu
điện từ khác (gọi là bảo vệ TEMPEST).
- Kiểm soát chu kỳ sống: thiết kế, thực thi, đánh giá, xác nhận hệ thống đáng
tin cậy; lập trình các chuẩn và các điều khiển, quản lý tài liệu.
Để đảm bảo an toàn mạng máy tính một cách hiệu quả cần phải sử dụng phối
hợp các biện pháp đối phó từ các lớp khác nhau. Những biện pháp bảo vệ có thể bảo
đảm chống lại hầu hết các mối đe doạ, nhưng mỗi sự bảo vệ đều có giá của nó. Mỗi
cơ quan, tổ chức sử dụng mạng cần xem xét một cách cẩn thận chi phí bảo vệ so với
giá tiềm năng của một cuộc tấn công thành công.
1.1.5. Các dịch vụ an toàn
Trong ngữ cảnh truyền thông máy tính, các cách bảo vệ an toàn chính được
gọi là các dịch vụ an toàn. Các dịch vụ an toàn tổng quát (khái niệm dịch vụ an toàn
và các dịch vụ an toàn tổng quát xuất phát từ chuẩn kiến trúc an toàn ISO/IEC
7498-2) bao gồm:
10
- Dịch vụ giữ bí mật (Confidentiality service): bảo vệ chống lại thông tin bị lộ
hoặc bị khám phá do các thực thể không được phép.
- Dịch vụ xác thực (Authentication service): cung cấp sự đảm bảo về định danh
của thực thể nào đó (một người hoặc một hệ thống).
- Dịch vụ toàn vẹn dữ liệu (Data integrity service): bảo vệ chống lại dữ liệu bị
thay đổi, xoá, hoặc thay thế trái phép.
- Dịch vụ chống chối bỏ (Non-repudiation service): bảo vệ chống lại một nhóm
trao đổi truyền thông từ chối một cách không đúng khi trao đổi xảy ra.
- Dịch vụ kiểm soát truy nhập (Access control service): bảo vệ chống lại việc
sử dụng hoặc thao tác trái phép trên các tài nguyên.
Chính sách an toàn đối với một vùng an toàn sẽ định ra dịch vụ an toàn nào
được sử dụng trong miền đó hoặc trong các cuộc truyền thông giữa vùng đó và các
vùng khác. Nó cũng sẽ định ra với tình huống nào thì một dịch vụ an toàn được sử
dụng và những hạn chế gì được đặt trong các tham biến của một dịch vụ.
1.1.5.1. Dịch vụ bí mật
Dịch vụ bí mật bảo đảm rằng thông tin trong hệ thống máy tính và thông tin
được truyền được đọc bởi những bên được ủy quyền. Thao tác đọc bao gồm in ấn,
hiển thị thông tin. Nói cách khác, dịch vụ bí mật bảo vệ dữ liệu được truyền chống
lại các tấn công bị động nhằm khám phá nội dung thông tin. Dịch vụ này còn cung
cấp khả năng bảo vệ luồng thông tin khỏi bị tấn công phân tích tình huống. Có một
sự khác nhau giữa thông tin (information) và dữ liệu (data) [49]. Thông tin luôn có
một ý nghĩa nào đó, một mục dữ liệu (data item) là một xâu các bít được dùng để
lưu trữ hoặc truyền thông tin. Từ đó, một mục dữ liệu được chứa hoặc được truyền
tạo thành một dạng của kênh thông tin. Trong an toàn truyền thông máy tính có hai
kiểu của dịch vụ bí mật:
- Bí mật dữ liệu (data confidentiality): đảm bảo rằng không thể suy ra thông tin
nhậy cảm (sensitive information) từ nội dung hoặc kích cỡ của mục dữ liệu
nhận được.
11
- Bí mật luồng giao dịch mạng (traffic flow confidentiality): đảm bảo rằng
không thể suy ra thông tin nhạy cảm từ việc quan sát các luồng giao dịch
mạng.
Việc xem xét các dịch vụ bí mật dữ liệu có một vài biến thể phụ thuộc vào
việc phân nhỏ chúng, nghĩa là với mỗi mục dữ liệu thì dịch vụ bí mật nào được áp
dụng. Có ba dạng khác nhau của dịch vụ bí mật dữ liệu, đó là:
- Dịch vụ bí mật kết nối (connection confidentiality service): bảo vệ tất cả dữ
liệu trong một kết nối. Dịch vụ này được dùng cho giao thức kết nối như
TCP trong bộ giao thức TCP/IP.
- Dịch vụ bí mật không kết nối (connectionless confidentiality service): bảo vệ
dữ liệu của một khối dữ liệu không kết nối. Dịch vụ này được dùng cho giao
thức không kết nối như IP trong bộ giao thức TCP/IP.
- Dịch vụ bí mật trường lựa chọn (selective field confidentiality): chỉ bảo vệ
các trường được chỉ định trong một khối dữ liệu. Dịch vụ này thường được
dùng trong việc bảo vệ các cơ sở dữ liệu.
1.1.5.2. Dịch vụ xác thực
Các dịch vụ xác thực cung cấp sự đảm bảo về định danh của người hoặc vật
nào đó. Điều này có nghĩa là khi một ai đó đòi hỏi có một định danh cụ thể (ví dụ,
tên người dùng cụ thể), thì một dịch vụ xác thực sẽ cung cấp một phương tiện khẳng
định yêu cầu này là đúng. Dịch vụ xác thực đảm bảo rằng việc truyền thông là xác
thực nghĩa là cả người gửi và người nhận không bị mạo danh. Trong trường hợp có
một thông báo đơn như một thư điện tử hay một yêu cầu kết nối, dịch vụ xác thực
đảm bảo với bên nhận rằng thông báo đến từ đúng bên nêu danh. Trong trường hợp
có một giao dịch đang xảy ra, dịch vụ xác thực đảm bảo rằng hai bên giao dịch là
xác thực và không có kẻ nào giả danh làm một trong các bên trao đổi. Nói một cách
khác, dịch vụ xác thực yêu cầu nguồn gốc của thông báo được nhận dạng đúng với
các định danh đúng. Xác thực là rất quan trọng trong các dịch vụ an toàn, bởi vì tất
cả các dịch vụ an toàn khác chỉ có ý nghĩa khi thông tin được xác thực. Xác thực là
12
cách thức để chống lại sự giả danh mà nó có thể dẫn tới sự tổn thương của các dịch
vụ khác.
Xác thực áp dụng trong một ngữ cảnh cụ thể, nghĩa là ngữ cảnh mà ở đó định
danh được đưa ra. Hai trường hợp quan trọng trong dịch vụ xác thực là:
- Một định danh được đưa ra bởi một nhóm từ xa tham gia vào một liên kết
hoặc phiên truyền thông. Dịch vụ xác thực trong trường hợp này được hiểu là
xác thực thực thể (entity authentication).
- Một định danh được yêu cầu là bộ khởi sinh của một mục dữ liệu được đưa
ra cùng với mục dữ liệu đó. Dịch vụ xác thực trong trường hợp này được
hiểu là xác thực nguồn gốc dữ liệu (data origin authentication).
1.1.5.3. Dịch vụ toàn vẹn dữ liệu.
Dịch vụ toàn vẹn dữ liệu đòi hỏi rằng các tài nguyên của hệ thống máy tính
và thông tin được truyền không bị sửa đổi trái phép. Việc sửa đổi bao gồm các thao
tác chèn, xóa, thay đổi dữ liệu, nó cũng bao gồm cả việc thay đổi thứ tự, làm trễ
hoặc dừng các thông báo được truyền. Dịch vụ toàn vẹn dữ liệu có thể áp dụng cho
một thông báo, một luồng thông báo hay chỉ một số trường trong thông báo. Dịch
vụ toàn vẹn kết nối (connection integrity) [49] áp dụng cho một luồng thông báo,
tức là tất cả dữ liệu được truyền trong một kết nối và nó đảm bảo rằng các thông
báo được nhận có nội dung giống như khi được gửi, không bị nhân bản, chèn, sửa,
thay đổi trật tự hay dùng lại kể cả hủy hoại số liệu. Như vậy, dịch vụ toàn vẹn định
hướng kết nối quan tâm cả đến việc thay đổi thông báo và từ chối dịch vụ. Dịch vụ
toàn vẹn phi kết nối (connectionless integrity) [49] áp dụng cho tất cả dữ liệu của
một mục dữ liệu được truyền và chỉ quan tâm đến việc giữ cho thông báo không bị
sửa đổi. Dịch vụ toàn vẹn này liên quan đến các tấn công chủ động nên nó thiên về
phát hiện hơn là ngăn chặn. Dịch vụ toàn vẹn trường lựa chọn (selective field
integrity service) [49] chỉ áp dụng cho các trường được chỉ định trong một khối dữ
liệu. Tất cả các dịch vụ toàn vẹn dữ liệu nhằm chống lại việc tạo hoặc thay đổi dữ
liệu, tuy nhiên chúng không thể chống lại việc sao chép hoặc xóa dữ liệu.
13
1.1.5.4. Dịch vụ không thể chối bỏ
Dịch vụ không thể chối bỏ ngăn chặn người gửi hay người nhận chối bỏ
thông báo được truyền. Khi thông báo được gửi đi người nhận có thể chứng minh
rằng người gửi nêu danh đã gửi nó đi. Khi thông báo nhận được người gửi có thể
chứng minh thông báo đã nhận được bởi người nhận hợp pháp. Mục đích chính của
dịch vụ không thể chối bỏ là bảo vệ những người dùng truyền thông chống lại các
mối đe doạ từ những ngườì dùng hợp pháp khác, mà không phải là những kẻ tấn
công lạ mặt. Dịch vụ này có thể đảm bảo rằng các bằng chứng để giải quyết việc
tranh cãi là không thể bác bỏ được.
Về cơ bản, không thể chối bỏ có thể áp dụng cho bất kỳ một loại sự kiện nào
ảnh hưởng tới hai hoặc nhiều nhóm. Nếu chúng ta chỉ hạn chế các mối quan tâm tới
các môi trường mạng máy tính, thì kịch bản không thừa nhận có thể được chia
thành hai trường hợp phân biệt:
- Không thừa nhận nguồn gốc: Không thừa nhận là có một nhóm cụ thể khởi
sinh một mục dữ liệu cụ thể.
- Không thừa nhận sự phân phát: Không thừa nhận một mục dữ liệu cụ thể
được phát cho một nhóm cụ thể.
1.1.5.5. Dịch vụ kiểm soát truy nhập
Kiểm soát truy nhập là khả năng hạn chế và kiểm soát truy nhập đến các hệ
thống máy tính và các ứng dụng theo các đường truyền thông. Mỗi thực thể muốn
truy nhập đều phải được định danh hay xác nhận có quyền truy nhập phù hợp. Mục
đích của điều khiển truy nhập là bảo vệ chống lại truy nhập trái phép tới tài nguyên
mạng. Khái niệm truy nhập trái phép bao gồm sử dụng trái phép, tiết lộ trái phép,
thay đổi trái phép, sự phá hoại trái phép và việc đưa ra các lệnh trái phép. Điều
khiển truy nhập tham gia trực tiếp vào việc thực hiện các dịch vụ bí mật, toàn vẹn
và sẵn sàng của thông tin. Dễ nhận thấy vai trò của kiểm soát truy nhập đối với tính
bí mật và tính toàn vẹn của thông tin. Đối với thuộc tính sẵn sàng nó kiểm soát:
- Ai có thể đưa ra các câu lệnh quản trị mạng mà các lệnh này ảnh hưởng trực
tiếp tới tính sẵn sàng của mạng;
14
- Ai có thể giữ lại các tài nguyên để sử dụng chúng một cách không hiệu quả;
- Ai có thể biết được thông tin có thể được sử dụng tiếp theo trong một tấn
công từ chối dịch vụ.
Kiểm soát truy nhập là một cách thức yêu cầu các bên tham gia truyền thông
tiến hành đúng các thao tác mà mình được ủy quyền. Đây là vấn đề cần thiết cho cả
an toàn máy tính và an toàn truyền thông. Tuy nhiên, nó rất cần thiết cho các giao
thức truyền thông bởi vì cần phải truyền thông tin điều khiển truy nhập giữa các hệ
thống. Một khía cạnh khác của kiểm soát truy nhập là ngăn chặn những thông tin
nhạy cảm được truyền qua môi trường mà ở đó có thể bị rủi ro.
1.2. TÍCH HỢP MẬT MÃ VÀO HỆ THỐNG MẠNG DÙNG GIAO THỨC
TCP/IP
Kỹ thuật mật mã đóng một vai trò rất quan trọng trong việc bảo vệ thông tin
trên mạng. Để bảo mật thông tin trên mạng, người ta sử dụng các phương pháp mật
mã, đó là quá trình chuyển đổi thông tin từ thông tin dạng gốc sang thông tin dạng
mật. Trong phần này sẽ nghiên cứu và chỉ ra những điểm có thể tích hợp các thủ tục
mật mã vào các tầng trong mô hình giao thức TCP/IP để bảo mật thông tin trên
mạng [8], [26].
1.2.1. Cấu trúc giao thức TCP/IP
Hình 1.2 là cấu trúc của giao thức TCP/IP được mô tả trong [45], [48].
TCP/IP là một họ các giao thức cùng kết hợp với nhau để cung cấp dịch vụ truyền
thông liên mạng.
Trong bộ giao thức này, dữ liệu được truyền từ tầng trên xuống tầng dưới,
mỗi tầng sẽ tự động thêm thông tin điều khiển vào để đảm bảo rằng dữ liệu được
truyền chính xác. Thông tin điều khiển được gọi là Header và nó được đặt ở phía
trước dữ liệu cần truyền. Mỗi tầng đều quan niệm tất cả thông tin nhận được của
tầng trên như là dữ liệu và một thông tin Header của tầng đó được đặt vào phía
trước của dữ liệu nhận được. Khi nhận dữ liệu quá trình diễn ra ngược lại, mỗi tầng
có một cấu trúc dữ liệu riêng của nó và không quan tâm đến cấu trúc dữ liệu được
sử dụng của các tầng trên hay tầng dưới.
15
Tầng ứng dụng
Tiến trình người dùng
Tiến trình người dùng
Tầng vận tải
TCP
UDP
IGMP
Tầng Internet
IP
ICMP
ARP
RARP
Tầng truy nhập mạng
Giao diện phần cứng
Đường truyền
Hình 1.2: Cấu trúc của giao thức TCP/IP
- Tầng truy nhập mạng (Network Access): Đây là tầng thấp nhất trong mô
hình TCP/IP. Các giao thức ở tầng này cung cấp cách thức để hệ thống chuyển dữ
liệu tới các thiết bị khác đang kết nối trên mạng. Tầng này xác định cách sử dụng
mạng vật lý để chuyển các gói tin IP của tầng mạng. Tầng truy nhập mạng phải biết
hết các chi tiết của tầng vật lý ở dưới như cấu trúc thông tin, cách đánh địa chỉ... để
định dạng dữ liệu chuyển xuống cho phù hợp với các điều kiện của mạng vật lý.
Trong mô hình TCP/IP tầng truy nhập mạng có thể thực hiện các chức năng của hai
tầng phía dưới trong mô hình OSI (tầng liên kết dữ liệu và tầng vật lý). Chức năng
của tầng truy nhập mạng là nhận gói thông tin của tầng IP và tạo frame thông tin để
có thể chuyển trên mạng, đồng thời phải tạo được sự tương ứng giữa địa chỉ vật lý
và địa chỉ IP [45].
- Tầng Internet (Internet Layer): Là tầng phía trên tầng truy nhập mạng trong
mô hình TCP/IP. Giao thức Internet hay còn gọi là giao thức IP là giao thức quan
16
trọng nhất trong tầng Internet. Giao thức IP cung cấp dịch vụ để truyền gói tin và
mạng TCP/IP được xây dựng dựa trên dịch vụ này. Tất cả các giao thức của tầng
phía trên (TCP/UDP) và tầng phía dưới (Ethernet, FDDI,...) của tầng Internet đều sử
dụng giao thức IP để truyền dữ liệu [45]. Tất cả các dữ liệu dù đến hay đi của mô
hình TCP/IP đều đi qua tầng IP không phụ thuộc vào đích cuối.
- Tầng vận tải (Transport Layer): Tầng vận tải nằm ở phía trên của tầng
Internet, hai giao thức quan trọng của tầng này là giao thức điều khiển truyền tin
TCP (Transport Control Protocol) và giao thức gói dữ liệu người dùng UDP (User
Datagram Protocol). Giao thức TCP là giao thức truyền tin có liên kết, có sửa sai
đầu cuối. Giao thức UDP là giao thức truyền tin không liên kết.
- Tầng ứng dụng (Application Layer): Tầng ứng dụng là tầng trên cùng trong
cấu trúc bộ giao thức TCP/IP. Tầng này bao gồm tất cả các chương trình có sử dụng
tầng vận tải để truyền dữ liệu. Có rất nhiều giao thức ứng dụng như: Telnet, FTP,
HTTP [45].
1.2.2. Tích hợp mật mã vào các tầng của giao thức TCP/IP
Cấu trúc giao thức TCP/IP cho phép chúng ta can thiệp mật mã vào một tầng
bất kỳ tùy theo chính sách an toàn được đưa ra. Dưới đây là một số căn cứ khi lựa
chọn tầng để tích hợp mật mã.
Lựa chọn thành phần của gói IP để bảo vệ:
Một gói IP chứa dữ liệu bao gồm 3 thành phần: dữ liệu ứng dụng (data),
Header tầng vận tải (TCP/UDP Header), Header tầng Internet (IP Header) như trong
hình sau:
IP header TCP/IP header Dữ liệu ứng dụng
Hình 1.3: Cấu trúc gói tin IP
Khi dữ liệu được chuyển từ tầng vận tải xuống các tầng dưới, tại mỗi tầng
Header điều khiển được gắn vào phía bên trái của dữ liệu do tầng trên chuyển
xuống. Mỗi Header có cấu trúc riêng và có vai trò trong việc chuyển dữ liệu từ ứng
dụng của máy nguồn tới ứng dụng của máy đích. Dựa vào [52], ta có bảng 1.1 chỉ ra
17
khả năng bảo vệ các thành phần của gói IP khi tích hợp mật mã vào các tầng trong
giao thức TCP/IP.
Tầng Data TCP/UDP header IP header
Tầng ứng dụng x
Tầng vận tải x x
Tầng Internet x x x
Tầng truy nhập mạng x x x
Bảng 1.1: Bảo vệ các thành phần của gói IP trong giao thức TCP/IP
Nhìn vào bảng 1.1 chúng ta thấy rằng, để bảo vệ dữ liệu ứng dụng chúng ta
có thể can thiệp mật mã vào một trong bốn tầng. Nhưng để bảo vệ Header tầng vận
tải chúng ta chỉ có thể can thiệp mật mã vào một trong ba tầng dưới. Tầng ứng dụng
không quan tâm đến Header của tầng vận tải được nối vào đầu khối dữ liệu.
Tích hợp mật mã vào các tầng trong giao thức TCP/IP
- Lựa chọn dịch vụ cần cài đặt.
Dịch vụ an toàn Tầng ứng Tầng vận Tầng Tầng truy
dụng tải Internet nhập mạng
Bí mật kết nối x x (TCP) x
Bí mật không kết nối x x (UDP) x x
Bí mật trường lựa chọn x
Bí mật luồng giao dịch x x x
Xác thực thực thể x x (TCP)
Xác thực nguồn gốc dữ liệu x x (UDP) x
Toàn vẹn kết nối khôi phục x x (TCP)
Toàn vẹn không kết nối x x (UDP) x
Toàn vẹn trường lựa chọn x
Không chối bỏ x
Bảng 1.2: Các dịch vụ an toàn được cài đặt tại các tầng trong giao thức TCP/IP
Theo tài liệu [49], trong chuẩn ISO 7489-2 đã chỉ ra các dịch vụ an toàn được
cài đặt tại các tầng trong mô hình OSI. Đối chiếu mô hình TCP/IP với mô hình OSI,
18
chúng ta có các dịch vụ an toàn được cài đặt bằng kỹ thuật mật mã tại các tầng của
giao thức TCP/IP như trong bảng 1.2, ta có một số nhận xét sau:
- Tại tầng ứng dụng chúng ta có thể cài đặt tất cả các dịch vụ an toàn.
- Tầng vận tải có hai giao thức TCP và UDP, trong đó TCP là giao thức kết
nối và UDP là giao thức không kết nối. Tại tầng vận tải chúng ta có thể cài
đặt cả dịch vụ an toàn kết nối và không kết nối.
- Giao thức IP là giao thức không kết nối, các dịch vụ cài đặt tại tầng IP là
các dịch vụ không kết nối.
- Tại tầng truy nhập mạng ta chỉ có thể cài đặt một số dịch vụ bí mật.
1.2.2.1. Tích hợp mật mã vào tầng ứng dụng
Theo [49] lựa chọn tích hợp mật mã vào tầng ứng dụng được đưa ra khi:
- Dịch vụ an toàn cần được tích hợp vào một ứng dụng cụ thể như ứng dụng
thư điện tử, ứng dụng Web,… Khi tạo ra các sản phẩm an toàn tầng ứng dụng,
chúng ta quan tâm đến các yêu cầu gắn liền với ứng dụng. Chẳng hạn với ứng dụng
truyền file, ta cần quan tâm đến điều khiển truy nhập file và cập nhật các danh sách
điều khiển truy nhập file. Trong các trường hợp khác chúng ta phải truy nhập được
vào các trường lựa chọn của dữ liệu nhằm cài đặt các dịch vụ bí mật trường lựa
chọn, toàn vẹn trường lựa chọn.
- Dữ liệu cần bảo vệ phải đi qua bộ chuyển tiếp các ứng dụng.
Thư điện tử là một ví dụ điển hình về ứng dụng trong đó dữ liệu cần bảo vệ
phải đi qua bộ chuyển tiếp ứng dụng. Trường nội dung thư được bảo vệ bằng kỹ
thuật mật mã, các trường khác như trường địa chỉ, trường vết được giữ nguyên vì
các hệ thống trung gian cần nhận biết thông tin này. Trong các trường hợp như vậy,
dịch vụ an toàn phải được cài đặt ở mức ứng dụng.
Ưu điểm của việc tích hợp mật mã vào tầng ứng dụng:
+ Có thể cài đặt được tất cả các dịch vụ an toàn.
+ Có thể quyết định các cách thức bảo vệ cho từng loại dữ liệu của ứng dụng.
+ Không đòi hỏi sự can thiệp vào các tầng thấp hơn khi cài đặt dịch vụ an
toàn.
19
Hạn chế của việc tích hợp mật mã vào tầng ứng dụng:
+ Phải can thiệp vào cấu trúc của mỗi ứng dụng cần bảo mật.
+ Phải can thiệp vào tất cả các máy đang chạy ứng dụng cần bảo vệ.
+ Ảnh hưởng đến tính toàn vẹn của ứng dụng, khó khăn trong việc di chuyển
ứng dụng sang hệ thống khác.
+ Người dùng phải thay đổi thói quen trong việc sử dụng các ứng dụng.
1.2.2.2. Tích hợp mật mã vào tầng vận tải
Theo [49] những yếu tố quyết định việc lựa chọn tích hợp mật mã vào tầng
vận tải được đưa ra khi:
- Khả năng tạo các dịch vụ bảo vệ trong suốt với các ứng dụng.
- Khả năng tạo ra dịch vụ bảo vệ luồng dữ liệu có hiệu năng cao nhờ khả
năng thao tác trên các khối dữ liệu lớn và xử lý dữ liệu của nhiều dịch vụ theo cách
thức chung.
- Việc quản lý chính sách an toàn cho toàn hệ thống đầu cuối do một người
quản trị thống nhất, không phân biệt từng ứng dụng riêng rẽ.
- Cần bảo vệ Header tầng vận tải của gói IP.
- Thừa nhận hệ thống đầu cuối (máy tính hiện thời) là tin cậy, nhưng tất cả
mạng truyền thông là không tin cậy.
- Các yêu cầu an toàn được đưa ra bởi người có thẩm quyền của hệ thống đầu
cuối và áp dụng cho tất cả các giao dịch không quan tâm đến ứng dụng cụ thể.
Ưu điểm của việc tích hợp mật mã vào tầng vận tải:
+ Có thể bảo mật được dữ liệu ở tất cả các ứng dụng dùng giao thức TCP/IP.
+ Không đòi hỏi sự can thiệp sửa đổi các ứng dụng hiện có.
+ Trong suốt với người dùng; cho phép bảo vệ dữ liệu của từng kết nối dùng
giao thức TCP/IP.
Hạn chế của việc tích hợp mật mã vào tầng vận tải:
+ Không cài đặt được tất cả các dịch vụ an toàn như đã chỉ ra trong bảng 1.2.
+ Chỉ có một cơ chế bảo mật chung cho dữ liệu của tất cả các ứng dụng.
20
+ Phải cài đặt dịch vụ an toàn tại tất cả các máy có thông tin cần bảo mật.
1.2.2.3. Tích hợp mật mã vào tầng Internet
Theo [49] những yếu tố quyết định việc lựa chọn tích hợp mật mã vào tầng
Internet là:
- Khả năng tạo các dịch vụ bảo vệ trong suốt với ứng dụng.
- Tạo ra dịch vụ bảo vệ luồng dữ liệu có hiệu năng cao nhờ khả năng thao tác
trên các khối dữ liệu lớn và xử lý dữ liệu của nhiều ứng dụng theo cách thức chung.
- Hạn chế số điểm cần cài đặt dịch vụ an toàn. Mỗi mạng nội bộ chỉ cần
chọn, cài đặt một thiết bị Gateway để bảo mật gói IP. Tất cả các gói IP được sinh ra
bởi các ứng dụng trong mạng con sẽ được can thiệp mật mã tại các GateWay trước
khi ra kênh công khai.
- Quan tâm đến thông tin định tuyến của gói IP, chẳng hạn cần tích hợp với
ứng dụng Firewall lọc gói.
- Cần bảo vệ các thành phần của gói IP kể cả IP Header.
- Việc quản lý chính sách an toàn hệ thống đầu cuối do một người quản trị
phụ trách, không phân biệt ứng dụng riêng rẽ.
Ưu điểm của việc tích hợp mật mã vào tầng Internet:
+ Có thể bảo mật được dữ liệu ở tất cả các ứng dụng dùng giao thức TCP/IP.
+ Không đòi hỏi sự can thiệp sửa đổi các ứng dụng hiện có.
+ Trong suốt với người dùng.
+ Tăng cường khả năng của Firewall.
+ Giảm số đầu mối can thiệp dịch vụ an toàn.
+ Cho phép bảo vệ dữ liệu của một số ứng dụng thời gian thực.
Hạn chế của việc tích hợp mật mã vào tầng Internet:
+ Không có khả năng cài đặt một số dịch vụ an toàn.
+ Mạng nội bộ đứng sau Gateway bảo vệ gói IP phải an toàn.
+ Người quản trị phải có kiến thức tốt về công nghệ mạng và quản trị mạng.
21
1.2.2.4. Tích hợp mật mã vào tầng truy nhập mạng
- Việc tích hợp mật mã cho phép bảo vệ dữ liệu của các Frame chứa gói IP.
Nó không quan tâm đến cấu trúc gói IP cũng như các gói thông tin khác được chứa
trong Frame. Chính vì vậy, tại các nút trung gian trên đường truyền, Frame phải
được mã hóa, giải mã để các Router biết thông tin định tuyến gói IP sau đó Frame
được mã hóa trở lại để chuyển tiếp.
- Thường dùng thiết bị phần cứng để bảo vệ dữ liệu mức truy nhập mạng.
Ưu điểm của việc tích hợp mật mã vào tầng truy nhập mạng:
+ Cho phép bảo vệ toàn bộ gói IP và các gói điều khiển khác.
+ Cho phép tạo ra các thiết bị cầu (Bridge) có chức năng bảo vệ thông tin
bằng kỹ thuật mật mã.
+ Cho phép tạo ra các thiết bị mã luồng tốc độ cao.
Hạn chế của việc tích hợp mật mã vào tầng truy nhập mạng:
+ Chỉ có thể cài đặt mật mã dùng phương thức theo tuyến truyền (Link To
Link).
+ Mỗi thiết bị chuyển mạch trung gian phải tiến hành giải mã toàn bộ dữ liệu
để thu được thông tin định tuyến sau đó phải mã lại dữ liệu đó để truyền đi theo
tuyến mới.
+ Chỉ cài đặt được một số dịch vụ an toàn.
1.2.3. Cài đặt các dịch vụ an toàn dùng kỹ thuật mật mã
Kỹ thuật mật mã đóng một vai trò quan trọng và là phương tiện kỹ thuật có
tính quyết định trong việc bảo mật thông tin trên mạng máy tính [8], [26]. Các hệ
thống mật mã được chia thành hai loại chính: mật mã khóa bí mật và mật mã khóa
công khai. Trong mật mã khóa bí mật, khóa mã và khóa dịch là như nhau hoặc có
thể dễ dàng suy ra được từ nhau. Trong mật mã khóa công khai, khóa mã và khóa
dịch là khác nhau và từ khóa mã không thể tính được khóa dịch theo nghĩa độ phức
tạp tính toán. Đây là những đặc trưng quan trọng, quyết định đến quá trình cài đặt
các dịch vụ an toàn dùng kỹ thuật mật mã.
Mô hình bảo mật thông tin dùng kỹ thuật mật mã được thực hiện theo hình 1.4.
22
QUẢN
LÝ
KHOÁ
(Decryption Key)
(Encryption Key)
Kd Ke
Bên nhận
Bên gửi
BẢN MÃ C
BẢN MÃ C
BẢN RÕ M
Kd Ke
Giải mã
Mã hoá
Kênh truyền tin
(Decryption Key)
(Encryption Key)
BẢN RÕ Bản rõ M M
Hình 1.4: Mô hình bảo mật thông tin dùng kỹ thuật mật mã
Trong đó:
M: là văn bản gốc (Plaintext), văn bản chưa được mã hoá.
C: là văn bản mã hóa (CipherText).
E: là hàm mã hoá (Encryption Function).
D: là hàm giải mã (Decryption Function).
Khoá (Key): gồm một số hữu hạn các bit thường được biểu diễn dưới dạng
các xâu ký tự, chữ số, số thập phân. Mặc dù độ dài của khoá có thể lấy bằng văn
bản gốc nhưng thực tế thường dùng các khoá 8 ký tự. Khóa thường được tạo ngẫu
nhiên và không dùng lại cho các phiên làm việc khác nhau.
Với quá trình mã hoá: dùng khoá Ke (khóa mã hóa)
C = EKe(M)
Với quá trình giải mã: dùng khoá Kd (khóa giải mã)
M = DKd(C) = DKd(EKe(M))
23
Hệ mật khóa bí mật thường dùng cùng một khoá để mã hoá và giải mã, khi
đó khoá phải được giữ bí mật tuyệt đối. Người ta thường gọi đó là hệ mật khóa đối
xứng hoặc một khoá.
Hệ mật khoá công khai (còn gọi là hệ mật bất đối xứng hay hai khoá), trong đó
khoá để mã hoá và khoá để giải mã là khác nhau. Các khoá này tạo thành bởi một
cặp chuyển đổi ngược nhau và không khoá nào có thể suy ra được từ khoá kia.
Khoá mã hoá có thể công khai, nhưng khoá giải mã thì phải được giữ bí mật.
Một vấn đề quan trọng là việc quản lý các khoá mật mã, bao gồm tất cả các
thủ tục để khởi tạo, phân phối, sử dụng, lưu trữ và huỷ bỏ các khoá mật mã [40].
Với các hệ thống sử dụng ít khoá thì có thể dùng phương pháp quản lý phân phối
khóa thủ công. Song đối với hệ thống mạng máy tính lớn thì việc quản lý, phân phối
khóa phải được thực hiện tự động để cho phép các khoá được trao đổi nhanh chóng,
hiệu quả, mềm dẻo, an toàn và chi phí thấp.
Mô hình mã hóa khóa đối xứng
Bên gửi
Bên nhận
Mạng
Khoá bí mật K (kênh truyền an toàn)
1.Lấy khoá K 2.Nhận{M}K 3.f-1(K,{M}K)M
1.Lấy khoá K 2.f(K,M){M}K 3.Gửi {M}K
{M}K
Hình 1.5: Mô hình mã hóa khóa đối xứng
Trong đó :
Bản rõ M được truyền đi ở dạng mã hoá {M}K từ bên gửi tới bên nhận.
Trước khi việc truyền tin có thể xảy ra cả hai bên đều phải có khoá bí mật K thông
qua một kênh an toàn.
24
Trong hệ mật khóa đối xứng nguồn tin được mã hoá bằng việc áp dụng một
hàm mã hoá đã quy định trước để mã hoá bản tin với khoá bí mật. Việc giải mã
được thực hiện bởi hàm nghịch đảo với bản mã nhưng vẫn cùng một khoá bí mật.
Vì các khoá được giữ bí mật nên các hàm mã hoá và giả mã không cần thiết phải
che dấu. Cả hai bên gửi và nhận đều phải có hàm mã hoá (hoặc hàm nghịch đảo của
nó) và một khoá bí mật dùng chung.
Hệ mật khóa đối xứng đòi hỏi phải có cùng một khoá để mã hóa và giải mã
vì thế mà khoá mã phải được phân phối theo một kênh hoàn toàn bí mật, đây chính
là nhược điểm của hệ mật. Tuy nhiên, hệ mật này có một điểm vô cùng mạnh đó là
có thể dùng khoá ngẫu nhiên vì thế hệ mật có thể đạt tới độ mật lý tưởng. Hệ mật
này thường được dùng để mã các thông tin được phân loại là “mật” và “tối mật”.
Ưu điểm của hệ mật là tốc độ mã hóa, giải mã nhanh và thường được dùng để mã
hóa dữ liệu lớn. Như vậy, có thể dùng hệ mật khóa đối xứng để mã hoá các thông
tin lưu trữ khi phân phối khoá không trở thành vấn đề nan giải.
Mô hình mã hóa khóa công khai
CƠ SỞ DỮ LIỆU KHOÁ CÔNG KHAI
Yêu cầu khoá Ke
Ke
Ke
Bên nhận B
Bên gửi A
1) Tính toán Ke, Kd
1) Lấy khoá Ke
{ M}Ke
2) E(Ke, M) {M}Ke 3) Gửi {M}Ke
2) Đưa ra Ke, bí mật Kd 3) Nhận {M}Ke 4) D(Kd, {M}Ke) M
Hình 1.6: Mô hình mã hoá dùng khoá công khai
Lược đồ mã hoá dùng khoá công khai hình 1.6 do Whitfield Diffie và Martin
Hellman lần đầu tiên đề xuất (1976) như là phương pháp mã hóa bỏ qua tính tin cậy
25
giữa các kênh truyền thông. Trong hệ mật khóa công khai, mỗi người dùng có một
cặp khóa mã Ke và khóa dịch Kd, trong đó khóa mã Ke được công bố công khai
nhưng phải được xác thực và khóa dịch Kd được giữ bí mật. Giữa khóa mã và khóa
dịch phải có mối quan hệ nào đó với nhau thì mới có thể mã hóa và giải mã được.
Tuy nhiên một yêu cầu rất quan trọng của hệ mật là việc tính khóa dịch Kd từ khóa
mã Ke phải là bất khả thi về mặt thời gian.
Để có được cặp khóa Ke và Kd như trên, người ta thường dùng các hàm một
chiều (oneway function) để xác định quan hệ giữa hai khoá mà rất khó xác định Kd
nếu chỉ biết Ke. Hàm một chiều là hàm f(X) = Y nào đó mà nếu có giá trị Y thì cũng
rất khó xác định được giá trị tương ứng của X do độ phức tạp tính toán. Như vậy, f(X) là hàm một chiều, nên việc tính X = f -1(Y) rất khó. Nhưng nếu có thêm thông tin về cửa sập z nào đó để việc tính toán X = f -1(Y) trở nên dễ dàng thì f(X) được
gọi là hàm cửa sập một chiều.
Phương pháp trên được gọi là mã hoá dùng khoá công khai và nó tránh được
sự cần thiết phải truyền các khoá bí mật giữa các bên tham gia truyền thông. Nó dựa
trên hai hàm tách biệt E, D và hai khoá tách biệt Ke, Kd để mã hoá và giải mã.
Chẳng hạn nếu đối tượng B muốn nhận thông tin bí mật từ các đối tượng
khác thì B sinh ra một cặp khoá Ke và Kd, B công khai khoá Ke và giữ bí mật khoá
Kd. Có thể làm điều này hoặc bằng cách gửi Ke trực tiếp cho các đối tượng mà nó
mong muốn nhận thông tin từ chúng hoặc bằng cách gửi Ke cho dịch vụ phân phối
khoá công khai.
Một đối tượng nào đó muốn gửi thông tin bí mật M cho B thì lấy khoá công
khai Ke của B và dùng E(Ke, M) để sinh ra {M}Ke rồi gửi nó cho B. Chỉ B mới biết
Kd và có thể áp dụng D(Kd, {M}Ke) để giải mã thông báo. Ý tưởng này được minh
hoạ trong hình 1.6, ở đó A truyền thông báo bí mật cho B sau khi có được khoá
công khai của B từ dịch vụ phân phối khoá.
Một vài thuật toán đã được đề xuất để sinh và sử dụng cặp khoá trong
phương pháp mã hoá dùng khoá công khai. Rivest, Shamir và Adelman đã thiết kế
26
một giải thuật mã hoá dùng khoá công khai RSA (1977) dựa trên tính khó giải của
bài toán phân tích số nguyên tố lớn.
Nhận xét về các phương pháp mã hóa
Để so sánh các phương pháp mã hóa cần dựa vào các yếu tố như độ phức tạp
tính toán, thời gian mã hoá, giải mã và vấn đề quản lý, phân phối khoá trong môi
trường mạng nhiều người sử dụng. Với hai phương pháp mã hoá trên ta có nhận xét:
- Tính an toàn: độ an toàn của các thuật toán mã hóa phụ thuộc vào kích cỡ
khóa, phương pháp thiết kế và độ phức tạp tính toán. Với những giải thuật
mã hoá và khoá thích hợp, cả hai phương pháp mã hóa khóa bí mật và mã
hóa khóa công khai đều đủ an toàn đối với mục đích bảo mật thông tin.
- Tính tiện lợi: mã hoá dùng khoá công khai có thể tiện lợi cho việc triển khai
trên hệ thống mạng bởi vì phương pháp này không đòi hỏi một kênh truyền
bí mật để phân phối khoá (nhưng cần phải có sự xác nhận về thông tin khóa
công khai). Khi có một server phân phối khoá, mã hoá dùng khoá công khai
có thể được dùng để thiết lập mối liên hệ ban đầu giữa các đối tượng mới
tham gia vào hệ thống với server để truyền khoá công khai tương ứng của đối
tượng, khóa công khai này sẽ được dùng cho tất cả các phiên liên lạc sau đó.
- Tốc độ thực hiện: tốc độ mã hóa, giải mã của phương pháp mã hoá dùng
khoá bí mật nhanh hơn rất nhiều so với mã hoá dùng khoá công khai.
Trong thực tế, để bảo mật thông tin truyền trên mạng người ta thường dùng
kết hợp hệ mật khóa bí mật và hệ mật khóa công khai. Hệ mật khóa công khai được
dùng để thiết lập khóa bí mật cho mỗi phiên trao đổi dữ liệu. Lúc này khóa bí mật
được gọi là khóa phiên (session key), các phiên trao đổi dữ liệu khác
nhau sẽ dùng các khóa bí mật khác nhau và dữ liệu được mã hóa bằng hệ mật khóa
bí mật với khóa phiên đã được thiết lập.
1.3. GIẢI PHÁP BẢO MẬT DỮ LIỆU TRÊN ĐƯỜNG TRUYỀN
1.3.1. Một số chuẩn về an toàn và bảo mật thông tin
Việc nghiên cứu các giải pháp can thiệp mật mã vào các tầng trong cấu trúc
giao thức TCP/IP đã được đặc biệt quan tâm trên thế giới. Trong quá trình đó, các
27
chuẩn về an toàn Internet đã được hình thành nhằm thống nhất và chuẩn hóa các sản
phẩm an toàn thông tin. Theo [25] IETF (Internet Engineering Task Force) thuộc ủy
ban kiến trúc Internet IAB (Internet Architecture Board) đưa ra các chuẩn về an
toàn Internet như sau:
- Các chuẩn PEM, PGP, S/MIME về an toàn thư tín điện tử [8].
- Chuẩn SSL/TLS về an toàn tầng vận tải [3], [13], [37], [53].
- Chuẩn S-HTTP về an toàn Web [27].
- Chuẩn IPSec về an toàn tầng Internet [24], [52], [53].
- Chuẩn SOCKS về an toàn Firewall [25].
- Chuẩn PKCS về mật mã khóa công khai [9], [15], [17], [38].
- Chuẩn X.509 về xác thực người dùng [26], [53].
Ngoài ra còn một số giải pháp khác đang được sử dụng rộng rãi như SSH,
SNMP security, SET...
Trên thế giới các sản phẩm bảo mật mạng hiện nay đều sử dụng một trong
các giao thức trên. Các sản phẩm trong bảo mật an toàn thông tin có thể chia thành
hai nhóm chính: sản phẩm bằng phần mềm và sản phẩm bằng phần cứng. Các giải
pháp phần mềm hiện nay như OpenSwan, StrongSwan (IPSec), OpenSSH (SSH),
OpenVPN, SoftEther VPN (SSL/TLS), các sản phẩm này có thể triển khai dễ dàng
trên các máy tính thông dụng nhưng thường bị hạn chế về hiệu năng bởi khả năng
xử lý mã hóa/giải mã của bộ xử lý máy tính. Một số giải pháp phần mềm cho phép
kết hợp với các thiết bị phần cứng mã hóa, giải mã để tăng tốc độ mã hóa dữ liệu.
Các giải pháp phần cứng thiết bị chuyên dụng như các sản phẩm của Cisco,
Checkpoint, Jupiter Network, Fortinet..., giải pháp này thường có hiệu năng cao hơn
giải pháp phần mềm do tích hợp sẵn các bộ đồng xử lý mật mã (crypto co-
processor) thiết kế trên công nghệ FPGA/ASIC. Hàng loạt các giải pháp bảo mật,
sản phẩm mật mã đã ra đời dựa trên các chuẩn bảo mật trên nhằm đáp ứng nhu cầu
bảo mật và an toàn hệ thống mạng, trong đó các sản phẩm thường gặp là hệ thống
mã hóa luồng thông tin (thoại, luồng IP…), hệ thống xác thực chữ ký số, hệ thống
mạng riêng ảo VPN (Virtual Private Network), hệ thống tường lửa (Firewall), hệ
thống giám sát an ninh mạng, hệ thống phát hiện và chống truy cập trái phép
28
(IDPS). Trong hầu hết các sản phẩm nói trên các hệ mật đóng vai trò đặc biệt quan
trọng. Các hệ mật không chỉ giúp cho việc mã hóa dữ liệu mà nó còn là công cụ để
xác thực định danh, xác thực nguồn gốc và tính toàn vẹn của dữ liệu. Tuy nhiên, với
các sản phẩm bảo mật an toàn thông tin của nước ngoài chúng ta không hoàn toàn
kiểm soát và làm chủ về mật mã tích hợp trong sản phẩm.
Trong nước đã có những nghiên cứu về chuẩn an toàn và bảo mật thông tin,
các giải pháp xây dựng sản phẩm bảo mật, an toàn thông tin [64], [66], đặc biệt là
giải pháp bảo mật mạng máy tính [65] bao gồm: bảo mật dữ liệu tại chỗ, bảo mật
mật dữ liệu trên đường truyền và bảo mật các ứng dụng, dịch vụ mạng. Với giải
pháp và sản phẩm bảo mật mạng công nghệ chuyển mạch nhãn đa giao thức MPLS
[60], [67], đây là giải pháp bảo mật tầng IP (giao thức IPSec) tập trung bảo mật tại
các Gateway và đường biên của hệ thống mạng, giải pháp này có thể bảo mật được
luồng thông tin tốc độ cao nhưng chưa linh hoạt, tùy biến trong cấu hình, cài đặt,
tích hợp sản phẩm vào hệ thống mạng thực tế. Với giải pháp bảo mật các dịch vụ,
ứng dụng cụ thể trong nước có các dòng sản phẩm bảo mật Mail, bảo mật Web, bảo
mật cơ sở dữ liệu và sản phẩm bảo mật hội nghị truyền hình. Trong giải pháp trên
chúng ta phải thực hiện can thiệp mật mã vào cấu trúc của từng ứng dụng, dịch vụ
cụ thể làm thay đổi cấu trúc, ảnh hưởng đến tính toàn vẹn và thói quen sử dụng các
dịch vụ, ứng dụng.
Lựa chọn giải pháp tích hợp mật mã cho bài toán bảo mật dữ liệu trên
đường truyền.
Hiện nay, các nghiên cứu về bảo mật dữ liệu trên đường truyền chủ yếu được
thực hiện bằng giải pháp tạo ra các mạng riêng ảo VPN kết hợp với kỹ thuật mật
mã. Mỗi VPN sẽ tạo ra một đường hầm ảo kết nối giữa hai điểm đầu và cuối, các dữ
liệu trao đổi bên trong đường hầm sẽ được đảm bảo bảo mật bằng kỹ thuật mật mã.
VPN cung cấp tính năng bảo mật bằng cách sử dụng các giao thức đường hầm
(Tunnelling protocol) và qua các thủ tục bảo mật như mã hóa, xác thực. Mô hình
bảo mật VPN cung cấp:
- Tính bí mật: Ngay cả khi giao thông mạng bị chặn thu ở mức gói tin, kẻ tấn
công chỉ thu được các dữ liệu đã mã hóa.
29
- Xác thực người gửi: Ngăn chặn người sử dụng truy cập trái phép VPN.
- Toàn vẹn thông điệp: Phát hiện các thông điệp giả mạo hay bị sửa đổi.
Hiện nay, trên thế giới có nhiều nhà cung cấp đưa ra các sản phẩm với giải
pháp VPN kết hợp giao thức bảo mật ở các tầng khác nhau được coi là giải pháp
hữu hiệu trong bảo mật dữ liệu trên đường truyền:
- Giao thức SSL/TLS (Secure Sockets Layer/Transport Layer Security) có
thể được sử dụng để tạo đường hầm bảo vệ toàn bộ giao thông mạng (như trong
OpenVPN/SoftEther VPN) hoặc đảm bảo một kết nối riêng lẻ. SSL/TLS VPN đáp
ứng được hầu hết các mục tiêu an ninh, an toàn: xác thực, tính toàn vẹn, bảo mật và
linh hoạt trong cấu hình, triển khai thực hiện, đặc biệt trong trường hợp hạ tầng
mạng có sử dụng dịch vụ chuyển đổi địa chỉ (NAT) hay bị hạn chế bởi tường lửa.
- Giao thức IPSec (Internet Protocol Security) đáp ứng được cơ bản các mục
tiêu an ninh: xác thực, tính toàn vẹn và bảo mật, IPSec mã hóa và đóng gói gói tin
IP bên trong IPSec, giải mã các gói tin gốc ở cuối đường hầm và chuyển tiếp gói tin
đến đích.
- DTLS (Datagram Transport Layer Security) được sử dụng trong một số sản
phẩm như Cisco AnyConnect VPN và OpenConnet VPN như một biện pháp khắc
phục các vấn đề gặp phải khi sử dụng SSL/TLS qua UDP.
- SSH VPN (Secure Shell): OPenSSH cung cấp VPN tunnelling để bảo vệ
kết nối từ xa với một mạng hoặc liên kết liên mạng. OPenSSH cung cấp một số giới
hạn các đường hầm đồng thời.
Yêu cầu bảo mật dữ liệu trên đường truyền đòi hỏi phải bảo vệ tất cả các dịch
vụ trên mạng, về mặt kỹ thuật IPSec và SSL/TLS [1] đều có những tính chất riêng
biệt, tùy theo yêu cầu bảo mật mà chọn lựa IPsec hay SSL/TLS. Do tính linh hoạt
trong việc cấu hình, triển khai thực hiện trên các mô hình, môi trường mạng khác
nhau và tính an ninh an toàn, bảo mật cao của SSL/TLS - VPN nên đây là giải pháp
chính, hữu hiệu nghiên cứu sinh lựa chọn để tích hợp các tham số an toàn và thuật
toán mật mã vào bộ giao thức thực hiện bài toán bảo mật dữ liệu trên đường truyền.
Giao thức SSL/TLS và công nghệ VPN không chỉ được phát triển ở dạng
phần mềm trên các môi trường hệ điều hành khác nhau, mà nó còn được tích hợp
30
vào các thiết bị phần cứng mạng như Router, Switch để tạo thành bộ sản phẩm với
các chức năng mạng rất hoàn chỉnh (định tuyến, an ninh an toàn, bảo mật…).
Với giải pháp tích hợp các tham số an toàn và thuật toán mật mã vào bộ giao
thức SSL/TLS để thực hiện bài toán bảo mật dữ liệu trên đường truyền, chúng ta có
thể chủ động tạo ra sản phẩm bảo mật thông tin trên mạng máy tính, với các module
mật mã kiểm soát làm chủ hoàn toàn và độ an toàn của sản phẩm do các module
mật mã quyết định.
1.3.2. Chuẩn về an toàn tầng vận tải SSL/TLS
1.3.2.1. Giới thiệu bộ giao thức
Giao thức SSL/TLS là một giao thức có thể được đặt ở giữa giao thức tầng
mạng kết nối định hướng tin tưởng (TCP/IP) và tầng giao thức ứng dụng (FTP,
HTTP, telnet ...). SSL/TLS cung cấp dịch vụ truyền thông có bảo mật giữa client và
server bằng việc cho phép client và server xác thực lẫn nhau sử dụng chữ ký số và
bảo mật thông tin trao đổi qua lại bằng cách mã hóa các thông tin đó.
Giao thức này được thiết kế để có thể trợ giúp một loạt các thuật toán sử
dụng cho việc mã hóa, hàm băm và chữ ký số. Giao thức SSLv3 đây là giao thức
SSL phiên bản 3.0 do Netscape Corporation thiết kế, đã có trợ giúp chuỗi các chứng
chỉ điện tử và hiện phiên bản này của giao thức SSL đã được hỗ trợ cho tất cả các
trình duyệt phổ thông.
Trên cơ sở phiên bản SSLv3, IETF đã thiết kế và công bố giao thức
Transport Layer Security version 1.0 (TLSv1). Ngoài ra IETF còn phát triển thêm
hai phiên bản TLS v1.1 và TLS v1.2, trong đó TLS v1.1 được bổ sung các tính năng
nhằm chống lại các tấn công liên quan đến chế độ mã hoá CBC (Cipher Block
Chaining), còn phiên bản TLS v1.2 [74] có hỗ trợ tích hợp các thuật toán mật mã
mới như: chuẩn mã hoá tiên tiến (AES), hàm băm SHA2,… Tuy nhiên, các phiên
bản mới của giao thức TLS hiện vẫn chưa được tích hợp cho một số các trình duyệt
đang được dùng phổ biến hiện nay.
1.3.2.2. Các thành phần trong giao thức SSL
Giao thức SSL gồm 4 thành phần chính [13], [74]:
31
- Giao thức bắt tay SSL (SSL Hanshake Protocol): Thực hiện chức năng bắt
tay giữa ứng dụng khách và ứng dụng chủ (thỏa thuận các thuật toán trao đổi
tham số, trao đổi khóa, xác thực server và client).
- Giao thức bản ghi SSL (SSL Record Protocol): Giao thức trao đổi dữ liệu có
bảo mật giữa ứng dụng khách và ứng dụng chủ.
- Giao thức báo lệnh SSL (SSL Alert Protocol): Thông báo lỗi trả về trong quá
trình thực hiện giao thức.
- Giao thức xác định thay đổi mã pháp SSL (SSL Change Cipher Spec
Protocol): Thông báo việc thực hiện thực hiện thiết lập các thuộc tính mật mã
cho phiên liên lạc đã hoàn thành.
ClientHello
ServerHello
Thiết lập protocol version, ID phiên, thuật toán mã hoá, phương pháp nén, trao đổi giá trị random
Certificate
Certificate Request
Server gửi certificate và yêu cầu Client gửi lại certificate nếu được thiết lập xác thực client
ServerHelloD one Certificate
Client gửi certificate nếu được yêu cầu
Certificate Verify ChangeCipherS pec Finished
Change CipherSuit và kết thúc giai đoạn Handshake
ChangeCipherS pec
Finished
Server
Giao thức bắt tay SSL
Client
Hình 1.7: Giao thức bắt tay SSL
Các tham số mật mã liên quan đến một phiên liên lạc được thực hiện thông
qua giao thức bắt tay SSL, giao thức này nằm ngay bên trên giao thức bản ghi SSL.
Khi SSL client và SSL server bắt đầu một phiên liên lạc chúng cần thống nhất về
32
phiên bản của giao thức sẽ được dùng, lựa chọn thuật toán mã hoá cho phiên liên
lạc, có thể có hoặc không việc xác thực lẫn nhau, và sử dụng thuật toán mã hoá
khoá công khai để sinh khoá chung cho phiên liên lạc đó. Tất cả các thông điệp trao
đổi qua lại giữa server và client phải được biểu diễn theo một cấu trúc định trước.
Tầng giao thức bản ghi SSL
Giao thức bản ghi SSL là một tầng giao thức. Đối với mỗi tầng giao thức nói
chung, một gói dữ liệu sẽ bao gồm các trường độ dài, mô tả và nội dung dữ liệu.
SSLv3 record nhận dữ liệu cần gửi từ tầng trên phân nhỏ thành từng block, nén dữ
liệu, bổ sung dữ liệu kiểm tra, mã hoá và gửi. Khi nhận dữ liệu về tiến trình được
thực hiện ngược lại: giải mã, kiểm tra, gỡ nén và sắp xếp lại rồi gửi lên tầng trên.
Trong đó dữ liệu tầng ứng dụng (Application data) có thể là dữ liệu của giao thức
bắt tay SSL, hoặc dữ liệu của các ứng dụng khác như HTTP, Telnet, ... Để phân biệt
được từng loại dữ liệu đó trong mỗi khối dữ liệu của SSL record đều có phần header
để phân biệt.
Application Data
Frame Frame Frame
Phân mảnh dữ liệu
Nén dữ liệu
Mã hoá và MAC
Chuyển xuống tầng TCP
TCP Frame
Cụ thể có thể diễn giải các giai đoạn trong giao thức này như sau:
Hình 1.8: Giao thức bản ghi SSL
Trong đó dữ liệu tầng ứng dụng (Application data) có thể là dữ liệu của giao
thức bắt tay SSL, hoặc dữ liệu của các ứng dụng khác như HTTP, Telnet, ... Để
33
phân biệt được từng loại dữ liệu đó trong mỗi khối dữ liệu của SSL record đều có
phần header để phân biệt.
Các giao thức ChangeCipherSpec và Alert.
Giao thức ChangeCipherSpec
Giao thức này chỉ bao gồm một thông điệp trong đó thực hiện chức năng
thông báo việc thiết lập các thuộc tính mật mã cho phiên liên lạc đã hoàn thành.
Thông điệp này chỉ có một byte duy nhất với giá trị là 1.
enum{change_cipher_Spec(1),(255)} type;
struct{ }ChangeCipherSpec;
Thông điệp ChangeCipherSpec được gửi từ cả máy client lẫn máy server để
thông báo cho bên nhận biết bắt đầu từ các frame dữ liệu tiếp theo sẽ được mã hoá
bởi CipherSpec và khoá vừa thiết lập được. Client gửi thông điệp này ngay sau khi
gửi xong thông điệp KeyExchange, còn server gửi ngay sau khi nhận và xử lý xong
thông điệp KeyExchange từ client.
Alert protocol
Một trong những kiểu dữ liệu được hỗ trợ bởi tầng giao thức bản ghi SSL là
kiểu alert (thông điệp cảnh báo). Các thông điệp cảnh báo truyền tải các thông báo
lỗi trong quá trình thiết lập cũng như trao đổi dữ liệu của một phiên liên lạc. Cũng
như các loại thông điệp khác, thông điệp cảnh báo cũng được mã hoá và nén.
1.3.3. Một số tấn công cơ bản đối với giao thức SSL
1.3.3.1. Tấn công quay lui phiên bản, quay lui thuật toán mã hóa.
Nguồn gốc: Tấn công này được đưa ra bởi tác giả David Wagner và Bruce
Schneier [11], [31].
Mô tả tấn công: Do tính tương thích ngược nên phiên bản SSL/TLS được
đưa ra có thể kết nối được với phiên bản SSL 2.0 kẻ tấn công lợi dụng. Đối
với SSL phiên bản 2.0 kẻ tấn công có thể thiết lập việc sử dụng thuật toán mã
hoá yếu cho client và server thông qua việc sửa danh sách các thuật toán mã
hoá dữ liệu được trợ giúp trong các thông điệp Hello.
34
Giải pháp khắc phục
Loại bỏ hoặc không thiết lập dùng giao thức SSL 2.0, chỉ chấp nhận thiết lập
kết nối khi version giữa Client và Server là 3.0 trở lên. Khi thiết lập các thuật toán
mã hóa cần loại bỏ những thuật toán yếu
1.3.3.2. Tấn công làm mất thông điệp ChangeCipherSpec
Nguồn gốc: Tấn công này được đưa ra bởi tác giả David Wagner và Bruce
Schneier [11].
Mô tả tấn công: Thông điệp ChangeCipherSpec không thuộc giai đoạn Bắt
tay nên thông điệp này không được xác thực trong thông điệp Finished. Đây
sẽ là một lỗ hổng cho kiểu tấn công làm mất thông điệp ChangeCipherSpec
(Hình 1.9).
Ba giai đoạn đầu tiên của Hanshake protocol đó thiết lập được các khóaMAC bí mật
Man in the middle
ChangCipherSpec
Gửi trạng thái cần cập nhật
Finc, MACk1(Finc)
Finc
Nhận trạng thái không được cập nhật, Finc được chấp nhận
ChangeCipherSpec
Fins, MACk2(Fins)
Gửi trạng thái cần cập nhật
Fins
Nhận trạng thái không được cập nhật, Fins được chấp nhận
data, MACk1(data)
Modified data
Client Server
Hình 1.9: Tấn công ChangeCipherSpec
Trong đó Finc, Fins là các thông điệp Finished của client và server.
35
Với cách tấn công trên, kẻ tấn công ở giữa sẽ làm mất hiệu lực việc cập nhật
thuật toán mã hóa dữ liệu, các tham số khác sẽ được dùng để bảo vệ dữ liệu trao đổi
ở tầng bản ghi.
Giải pháp khắc phục
Dưới đây là hai cách sửa lỗ hổng làm mất thông điệp ChangeCipherSpec được
đề xuất trong [11]:
- Cách thứ nhất: Cả client và server đều yêu cầu nhận được thông điệp
ChangeCipherSpec mới thực hiện việc xử lý thông điệp Finished. Đây là
cách mà phiên bản SSL 3.0 dùng để chống lại tấn công này. Trong bộ
chương trình OpenSSL đã sử dụng cách sửa này nhờ vào cờ nhớ s->s3-
>change_cipher_spec. Trước khi nhận được gói ChangeCipherSpec giá trị cờ
nhớ trên được thiết lập là 0. Chỉ khi nào nhận được gói ChangeCipherSpec
thì nó mới được thiết lập là 1. Đồng thời cờ s->s3->change_cipher_spec
được kiểm tra trước khi xử lý gói Finished để đảm bảo là đã nhận được thông
điệp ChangeCipherSpec. Sau đó giá trị cờ này lại được gán trả về giá trị 0.
- Cách thứ hai: Tính toán giá trị MAC của thông điệp Finished bao gồm cả
thông điệp ChangeCipherSpec.
1.3.3.3. Tấn công quay lui thuật toán trao đổi khoá
Nguồn gốc: Tấn công này được đưa ra bởi tác giả David Wagner và Bruce
Schneier [11] và được tổng hợp trong tài liệu [31].
Mô tả tấn công: Trong quá trình trao đổi khoá, chỉ thông điệp trao đổi khoá
của server được xác thực (sử dụng chữ ký số), hơn nữa việc xác thực thông
điệp trao đổi của server chỉ đảm bảo tính toàn vẹn của các tham số còn định
danh thuật toán trao đổi khoá không được xác thực. Đây là điều kiện để thực
hiện loại tấn công quay lui thuật toán trao đổi khoá (hình 1.10).
Với cách tấn công như trên, kẻ thực hiện tấn công sẽ có khóa k để mã/giải mã
dữ liệu ở tầng record trong giao dịch với client và khóa k' để mã/giải mã dữ liệu ở
tầng record trong giao dịch với server.
36
Man in the middle
Client Hello: SSL_RSA…
Client Hello: SSL_DHE…
Server Hello: SSL_DHE…
Server Hello: SSL_RSA…
Certificate
ServerKeyExchange: Certificate p, g, gy mod p, signature
ServerKeyExchange: p, g, gy mod p, signature
RSA modulus: p RSA Exponent: g
ClientKeyExchange: kg mod p
ClientKeyExchange: gx mod p
k’= gxy mod p
Tính: k’ = gxy mod p
Khôi phục k dễ dàng bằng cách tính căn bậc g (vì p là nguyên tố)
Client Server
Hình 1.10: Tấn công quay lui thuật toán trao đổi khóa
Giải pháp khắc phục
- Giải pháp ngăn chặn kiểu tấn công trên là thực hiện ký cả định danh thuật
toán trong thông điệp ServerKeyExchange.
- Sử dụng khóa bí mật chia sẻ trước để loại bỏ ngay từ đầu những gói tin lạ.
1.3.3.4. Tấn công padding CBC
Nguồn gốc: Tấn công này được trình bày trong tài liệu [6] bởi các tác giả
Bodo Moeller, Bill Frantz.
Mô tả tấn công: Các bài báo trên đã đưa ra hai phương pháp tấn công khác
nhau nhưng đều dựa trên mô hình tiên đoán Oracle. Trong OpenSSL sử dụng
mã khối CBC với dữ liệu padding là độ dài cần pad, byte cuối cùng lưu độ
dài padding. Giả sử kẻ tấn công bắt được hai khối mã liên tiếp là :
o A = AA AA AA AA AA AA AA a
o B = BB BB BB BB BB BB BB b
o Bản rõ tương ứng với B là: P = PP PP PP PP PP PP PP p
37
Kẻ tấn công muốn tấn công vào bản mã B để tìm ra P và dự đoán p==y nào
đó. Nó thực hiện việc gửi hai khối mã liên tiếp là A’ || B đến Server, với :
o A’ = AA AA AA AA AA AA AA (a XOR y)
Khi giải mã, Server sẽ tính được byte cuối cùng là :
o p’=(a xor y) xor (Decrypt(b))=(p xor y) vì a xor (Decrypt(b))=p
Nếu kẻ tấn công dự đoán đúng thì p’=0, như vậy độ dài padding sẽ bằng 0. Do
gói tin đã bị thay đổi nên kẻ tấn công sẽ nhận được thông báo "lỗi MAC". Nếu
kẻ tấn công dự đoán sai thì p’≠ 0 và kẻ tấn công sẽ nhận được thông báo "lỗi
padding".
Điều kiện tấn công: Tấn công kiểu padding CBC chỉ được áp dụng nếu có
các điều kiện sau đây :
- Thông tin được mã lại nhiều lần trong không gian có thể dự đoán được
(password chẳng hạn)
- Sử dụng chế độ mã CBC
- Kẻ tấn công có thể chặn bắt ở giữa và thực hiện việc tấn công trực tiếp
(Server có thể trả lời với bất kỳ gói tin lỗi nào)
- Kẻ tấn công có thể phân biệt sự khác nhau về thời gian của hai kiểu lỗi là
padding và MAC
Giải pháp khắc phục:
- Sử dụng phiên bản OpenSSL 0.9.7g trở lên sẽ đảm bảo đã được vá những lỗi
kể trên.
- Việc sử dụng khoá bí mật lưu trong thiết bị chuyên dụng để xác thực những
gói tin ngay từ giai đoạn đầu tiên của quá trình Handshack, điều này làm cho
tấn công padding CBC là không thể thực hiện được do kẻ tấn công không thể
kết nối đến server mà nhận lại thông báo lỗi padding hoặc MAC.
1.3.3.5. Lỗ hổng HeartBleed trong OpenSSL
Mô tả lỗ hổng bảo mật:
38
Một lỗ hổng nghiêm trọng trong hệ thống giao dịch trực tuyến được công bố
đầu tháng 4 năm 2014, lỗ hổng mang tên Heartbleed (Trái tim rỉ máu) nằm trong
phần mềm OpenSSL. Theo đó, các phiên bản OpenSSL từ 1.0.1 đến 1.0.1f đã có
một lỗi nghiêm trọng liên quan đến vấn đề xử lý bộ nhớ trong việc thực hiện phần
mở rộng Heartbeat trong giao thức TLS. Lỗi này có thể được sử dụng để kẻ tấn
công khám phá lên đến 64 KB bộ nhớ của ứng dụng với mọi yêu cầu mở rộng
heartbeat. Bằng cách đọc bộ nhớ của máy chủ web, những kẻ tấn công có thể truy
cập dữ liệu nhạy cảm, bao gồm cả khóa bí mật của máy chủ Web. Điều này có thể
cho phép kẻ tấn công giải mã thông tin liên lạc bị nghe trộm trước đó nếu sử dụng
giao thức mã hóa không đảm bảo tính chất PFS (an toàn hoàn thiện về phía trước).
Biết được khóa bí mật cũng có thể cho phép kẻ tấn công gắn kết một cuộc tấn công
kẻ đứng giữa MITM để thu thập lại bất kỳ thông tin liên lạc trong tương lai. Lỗ
hổng này cũng có thể tiết lộ những thông báo nhạy cảm không được mã hóa của
người dùng, bao gồm cả cookie phiên và mật khẩu, từ đó cho phép kẻ tấn công có
thể chiếm quyền điều khiển danh tính của người sử dụng.
Lỗ hổng này xuất phát từ một lỗi lập trình trong hàm
tls1_process_heartbeat() của file ssl/t1_lib.c (tương tự trong hàm
dtls1_process_heartbeat() của file ssl/d1_lic.c nếu sử dụng DTLS) của thư viện
OpenSSL.
Giải pháp khắc phục
- Phương pháp1: Không sử dụng phần mở rộng HeartBeat trong OpenSSL
(loại bỏ trong mã nguồn hoặc không biên dịch với tùy chọn -
DOPENSSL_NO_HEARTBEATS).
- Phương pháp 2:
+ Cập nhật bản vá cho các phiên bản OpenSSL bị lỗi. Phần quan trọng nhất của
bản vá lỗi là thực hiện hai việc kiểm tra. Đầu tiên là kiểm tra để dừng lại
HeartBeat nếu không đúng kiểu. Kiểm tra thứ hai để đảm bảo rằng chiều dài
thực tế của gói tin nhận được (trong biến s->s3->rrec.length) là phù hợp với
chiều dài được gửi kèm theo trong request packet (biến payload).
39
+ Nâng cấp OpenSSL lên phiên bản OpenSSL-1.0.1g hoặc cao hơn.
1.3.4. Giải pháp tích hợp mật mã nâng cao độ an toàn và hiệu quả cho bộ giao
thức SSL/TLS
Bộ giao thức SSL/TLS có vai trò quan trọng trong việc trao đổi thông tin trên
môi trường mạng, rất nhiều ứng dụng đã, đang và sẽ sử dụng bộ giao thức này để
giải quyết vấn đề đảm bảo an toàn, bảo mật thông tin trên đường truyền. Tuy nhiên,
mỗi thành phần của giao thức còn tồn tại những điểm yếu mất an ninh an toàn mà
qua đó kẻ tấn công có thể khai thác, làm thay đổi hoặc mất mát thông tin. Theo báo
cáo kết quả tổng hợp của Tạp chí An toàn thông tin, vào đầu tháng 3/2016, lỗ hổng
DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) đã được phát
hiện và công bố [62].
Vấn đề đặt ra đối với sản phẩm bảo mật dữ liệu trên đường truyền trong triển
khai thực tế đó là việc đảm bảo độ an toàn và hiệu năng của hệ thống khi có nhiều
yêu cầu kết nối bảo mật đồng thời. Giao thức SSL/TLS có hai giai đoạn chính ảnh
hưởng tới độ an toàn và tốc độ thực thi:
- Giai đoạn thiết lập, trao đổi khóa: Thiết lập các tham số an toàn, các thuật
toán mã hóa, giải mã, xác thực và trao đổi khóa.
- Giai đoạn mã hóa và giải mã gói tin: Sử dụng các thuật toán mã khối với chế
độ mã an toàn để bảo mật dữ liệu.
Thực tế đã có nhiều giải pháp nghiên cứu cải tiến giao thức bảo mật
SSL/TLS để nâng cao độ an toàn, hiệu năng, tốc độ thực thi mã hóa, giải mã:
Giai đoạn thiết lập và trao đổi khóa: các nghiên cứu tập trung vào nâng cao
độ an toàn, hiệu quả thực thi giao thức trao đổi khóa trong SSL/TLS. Trên cơ sở
phân tích, đánh giá những tấn công vào quá trình thiết lập, trao đổi khóa trong bộ
giao thức SSL/TLS [11], [36], [40], các nghiên cứu tập trung đề xuất tiêu chuẩn
tham số an toàn cho các thuật toán mật mã khóa công khai RSA cả về tiêu chuẩn an
toàn, cài đặt an toàn, hiệu quả và cách sử dụng hệ mật, tham số an toàn [61], [64],
[65], [66].
40
Trong tài liệu [65], [66] tác giả đã phân tích, đánh giá các tấn công hệ mật và
trình bày giải pháp "Sử dụng hệ RSA ra sao cho an toàn". Ta biết rằng hệ RSA có
hai ứng dụng đó là "Phân phối mầm khoá cho một hệ mật đối xứng nào đó" (dưới
góc độ một hệ mật) và "Xác thực thông tin" (dưới góc độ một hệ chữ ký số). Xuất
phát từ những yêu cầu khác nhau về các hệ được sử dụng (hệ mật hay hệ chữ ký)
nên khái niệm "An toàn" tương ứng cũng không như nhau và dẫn đến việc sử dụng
chúng sao cho an toàn cũng không giống nhau hoàn toàn. Mặc dù mục đích sử dụng
khác nhau nhưng cả hai ứng dụng trên của hệ RSA có một điểm chung về tính an
toàn đó là chúng đều được dựa vào tính "Khó giải được của bài toán RSA". Nếu
giải được bài toán RSA thì mọi ứng dụng của hệ RSA đều bị phá vỡ cho nên việc
nghiên cứu cách sử dụng hệ RSA an toàn đồng nghĩa với việc "Tìm cách làm cho hệ
thống này không tiềm ẩn một ngoại lệ nào dẫn đến bài toán RSA trở thành dễ giải".
Trong [4], [56], [57], [61], [64], [65], [66] các tác giả tập trung nghiên cứu đề xuất
xây dựng hệ tiêu chuẩn cho các số nguyên tố p, q và tham số khóa e, d cùng quan hệ
giữa chúng đảm bảo an toàn và hiệu quả cân bằng giữa độ an toàn, năng lực xử lý
tính toán và thời gian thực thi thuật toán. Ở một khía cạnh khác, trong tài liệu [65],
[66] tác giả đã nghiên cứu đề xuất cách dùng hệ mật và tham số an toàn, hiệu quả
loại bỏ được “lớp đầu vào yếu” của bài toán RSA, hạn chế được tấn công thám mã
theo phương pháp lựa chọn bản mã và giả mạo theo phương pháp lựa chọn bản rõ.
Giai đoạn mã hóa, giải mã gói tin: Sau khi đã thiết lập, trao đổi khóa và
thống nhất được thuật toán, khóa mã cho quá trình mã hóa và giải mã gói tin truyền
trên mạng thì độ an toàn và tốc độ mã hóa dữ liệu hoàn toàn phụ thuộc vào thuật
toán mã khối với chế độ mã phù hợp.
Đã có nhiều nghiên cứu phân tích, đánh giá các hệ mã khối theo ba tiêu chí
quan trọng là độ an toàn, chi phí cài đặt, hiệu năng thực hiện. Các tiêu chí này
thường được xem xét và phân tích tỉ mỉ trong các dự án lựa chọn chuẩn mã khối
trên thế giới như dự án CRYPTREC [75], dự án NESSIA [76] và NIST [77]. Trong
đó, đối với việc phân tích chi phí cài đặt và hiệu năng của thuật toán thường được
xem xét và đánh giá dựa trên cài đặt phần cứng và phần mềm trên nhiều nền tảng và
thiết bị khác nhau dựa trên định hướng của môi trường sử dụng. Một số nghiên cứu,
41
phân tích, đánh giá thuật toán mã khối gắn với giao thức bảo mật cụ thể và chế độ
mã hóa an toàn [5], [6], [12], [18], [19], [22]. Dựa trên các tiêu chuẩn đánh giá mã
khối, đã có nhiều nghiên cứu đề xuất thiết kế, xây dựng thuật toán mã khối an toàn,
hiệu quả tích hợp trong các ứng dụng bảo mật cụ thể [29], [55], [65], [66], [67]
nhằm tăng tốc độ mã hóa, tính linh hoạt trong triển khai ứng dụng. Các nghiên cứu
tập trung vào thiết kế, xây dựng cấu trúc, các thành phần cơ bản của mã khối đảm
bảo an toàn và hiệu quả như: thiết kế chung (cấu trúc, kích thước khối, kích thước
khóa, số vòng trong mã khối), thiết kế lược đồ khóa, thiết kế tầng tuyến tính, thiết
kế tầng phi tuyến và các chế độ sử dụng trong mã khối. Các tác giả đã thiết kế và
lập trình cài đặt thuật toán mã khối trên cả môi trường phần mềm và thiết bị phần
cứng đảm bảo an toàn, hiệu quả (hoàn thiện về cơ sở toán học, an toàn về cài đặt
kháng lại được tấn công thám mã đã biết và đảm bảo được tốc độ thực thi thuật toán
trong các môi trường ứng dụng cụ thể).
Trên cơ sở nghiên cứu, phân tích bộ giao thức SSL/TLS, các thành phần cơ
bản trong bộ giao thức, luận án đề xuất giải pháp tích hợp các thành phần mật mã để
nâng cao độ an toàn và hiệu quả cho giao thức SSL/TLS như sau:
- Nghiên cứu đề xuất tiêu chuẩn tham số an toàn đối với hệ mật RSA trong quá
trình tích hợp vào bộ giao thức SSL/TLS để nâng cao tính an toàn của giao
thức SSL/TLS.
- Nghiên cứu đề xuất cải tiến thuật toán mã khối và tối ưu hóa cài đặt theo tiêu
chí đảm bảo tính bảo mật và hiệu năng về tốc độ mã hóa dữ liệu để tích hợp
vào bộ giao thức SSL/TLS.
- Tiến hành một số giải pháp khắc phục và hạn chế một số điểm yếu mất an
ninh an toàn của bộ giao thức.
KẾT LUẬN CHƯƠNG 1
Trong chương này luận án đã trình bày các kết quả chính dưới đây:
- Trình bày các khái niệm cơ bản về an ninh an toàn trên mạng máy tính. Phân
tích bộ giao thức TCP/IP và khả năng bảo vệ thông tin khi can thiệp mật mã
vào các tầng trong mô hình giao thức TCP/IP để bảo mật thông tin; trong đó
42
bộ giao thức bảo mật SSL/TLS đóng vai trò quan trọng trong việc bảo mật dữ
liệu trên đường truyền.
- Phân tích bộ giao thức SSL/TLS, các thành phần cơ bản trong bộ giao thức,
chỉ ra một số điểm yếu mất an ninh, an toàn trong giao thức và những giải
pháp khắc phục điểm yếu. Xác định rõ vai trò của hệ mật RSA và thuật toán
mã khối trong giao thức bảo mật SSL/TLS, do đó các chương tiếp theo của
luận án sẽ tập trung nghiên cứu đề xuất nâng cao hiệu quả thực hiện thuật
toán mã khối theo hướng đảm bảo an toàn và tốc độ mã hóa giải mã dữ liệu;
đề xuất tiêu chuẩn an toàn đối với hệ mật RSA trong quá trình tích hợp vào
bộ giao thức SSL/TLS để xây dựng ứng dụng bảo mật đường truyền.
43
CHƯƠNG II: NÂNG CAO HIỆU QUẢ THỰC THI, ĐỘ AN TOÀN CỦA CÁC THAM SỐ HỆ MẬT RSA VÀ THUẬT TOÁN MÃ KHỐI
Trong chương này, luận án tập trung trình bày một số kết quả nghiên cứu đề
xuất mới về thuật toán, tham số mật mã phục vụ việc tích hợp vào giao thức bảo
mật dữ liệu trên đường truyền. Thứ nhất, luận án cập nhật bổ sung giả thiết xác định
độ dài modulo an toàn và một tiêu chuẩn mới đối với số mũ công khai trong hệ mật
RSA. Thứ hai, luận án đề xuất ma trận an toàn và cài đặt hiệu quả dựa trên ma trận
tựa vòng cho tầng tuyến tính trong các mã pháp dạng AES.
2.1. GIỚI THIỆU CHUNG
Với các hệ mật khóa công khai nói chung và hệ mật RSA nói riêng đều có độ
an toàn dựa trên độ phức tạp tính toán. Cụ thể, hệ mật RSA có độ an toàn dựa vào
tính khó giải của bài toán phân tích số nguyên lớn, nếu có thể phân tích được số
modulo N thì hệ mật này hoàn toàn bị phá vỡ. Để có thể thiết kế và lựa chọn các hệ
mật nói trên thì bài toán cơ bản đầu tiên cần giải quyết là xác định ngưỡng an toàn
theo chi phí thám mã. Tiếp đến, như một hệ quả, các hệ mật được sử dụng phải
chứng tỏ (trên cơ sở các kỹ thuật thám mã hiện hành và các dự đoán về sự phát triển
của các hệ mật) chi phí thực tế để thám các hệ mật này phải không dưới ngưỡng an
toàn đã đưa ra.
Trong mục 2.2, luận án trình bày phương pháp luận để xác định ngưỡng an
toàn cho những hệ mật có độ an toàn dựa vào độ phức tạp tính toán theo các luận cứ
riêng với mốc thời gian tính từ năm 2016. Từ đó, đưa ra các giá trị về ngưỡng an
toàn trong lĩnh vực kinh tế - xã hội làm cơ sở để lựa chọn độ dài modulo N cho hệ
mật RSA an toàn. Hơn nữa, trình bày về một tấn công hiệu quả sử dụng phương
pháp "mã hóa liên tiếp" để giải bài toán RSA trong trường hợp số mũ công khai e
có cấp ( ) đủ nhỏ. Dựa vào đó, luận án phát triển thuật toán giải bài toán
RSA thành thuật toán phân tích modulo N của hệ RSA hiệu quả trong trường hợp
chỉ cần hoặc đủ nhỏ. Với phát triển trên, luận án đề xuất bổ sung
44
thêm một tiêu chuẩn cho mũ công khai e cùng với việc tìm các số nguyên tố chứng
minh được sự thỏa mãn tiêu chuẩn đã đưa ra cho hệ RSA.
Về các hệ mật khóa bí mật, từ năm 2000 với việc thuật toán của Rijndael được
công nhận thành chuẩn mã dữ liệu nâng cao (AES), đã có nhiều nguyên thủy mới sử
dụng các thành phần tương tự như trong mã pháp AES [58]. Chiến lược vệt lan rộng
là một cách thức tinh tế của việc bảo đảm tính chất khuếch tán tốt cũng như cho
phép các nhà thiết kế dễ dàng đưa ra cận an toàn cho khả năng chống lại thám mã vi
sai và tuyến tính cho mã pháp nhận được [30]. Hơn nữa, một lợi ích khác là phân ra
sự lựa chọn của tầng tuyến tính và tầng phi tuyến một cách riêng biệt. Tóm lại, một
hộp thế bất kỳ khi kết hợp với tầng tuyến tính tốt sẽ tạo ra một mã pháp có khả năng
chống lại tấn công tuyến tính và vi sai.
Đối với các mã pháp dạng AES, tầng tuyến tính được kết hợp bởi hai thành
phần: một là giống với phép biến đổi MixColumns và một là giống với phép biến
đổi ShiftRows. Phép biển đổi giống MixColumns là phép nhân ma trận với một cột
của trạng thái và phép toán giống ShiftRow là một hoán vị các từ của trạng thái [29].
Trong thiết kế mã khối, tham số đặc trưng cho khả năng khuếch tán của một
tầng tuyến tính chính là số nhánh của nó. Nói một một cách ngắn gọn, số nhánh
tương ứng với giá trị nhỏ nhất số lượng các hộp thế hoạt động trong một cột đầu
vào và đầu ra miễn là cột đầu vào là hoạt động (số lượng các S-hộp hoạt động là
công cụ cơ bản cho việc đánh giá khả năng kháng lại tấn công tuyến tính vi sai và
tuyến tính). Do đó, để đạt được độ an toàn cao thông thường các nhà thiết kế thường
chọn lựa các ma trận có tính chất MDS [33] trong thiết kế của mình.
Tuy nhiên, khi thiết kế một tầng tuyến tính ngoài tính chất về độ an toàn,
chúng ta cần phải lựa chọn các tham số làm sao tầng tuyến tính nhận được phải dễ
dàng cài đặt trong cả môi trường phần mềm và phần cứng. Chiến lược thiết kế này
đôi khi dẫn đến sự thỏa hiệp giữa các tham số an toàn và tham số cài đặt với nhau.
Như trong tầng khuếch tán của AES, ma trận MDS sử dụng là một ma trận vòng
được lựa chọn kỹ lưỡng trên cơ sở đảm bảo độ an toàn và khả năng cài đặt. Tuy
nhiên, theo đánh giá trên quan điểm điểm bất động được tác giả Z’aba M. R. công
45
bố trong luận án tiến sỹ của mình thì tầng khuếch tán này lại có 216 điểm bất động
[55].
Trong [43] nhóm tác giả đề xuất một số ma trận MDS cuộn có dạng
Hadamard hiệu quả trong cài đặt phần cứng. Cụ thể trong tài liệu này đưa ra số cổng
XOR cần thiết đối với mỗi một ma trận đề xuất. Tuy nhiên, những tầng tuyến tính
dạng AES mà sử dụng ma trận MDS Hadamard cuộn lại có nhiều điểm bất động.
Mặt khác, việc lựa chọn các hệ số hiệu quả trong cài đặt lại phụ thuộc cả vào
bản thân đa thức sinh của trường hữu hạn. Luận án sẽ khai thác đặc điểm này để đề xuất các ma trận tựa vòng 4x4 trên trường GF(28) hiệu quả sử dụng trong thiết kế
tầng tuyến tính của các mã pháp dạng AES.
Trong mục 2.3, luận án đề xuất và đánh giá tầng tuyến tính có tính chất cài đặt
hiệu quả trong phần cứng dựa trên ma trận tựa vòng có thể sử dụng trong thiết kế
tầng tuyến tính cho các mã pháp dạng AES. Dựa trên cơ sở lý thuyết những nghiên
cứu trước đó, luận án đánh giá số lượng điểm bất động của tầng khuếch tán nhận
được. Bên cạnh đó luận án khảo sát và đánh giá các ma trận tựa vòng nhằm lựa
chọn ra một ma trận phù hợp cho việc xây dựng một tầng khuếch tán cho mã khối
có cấu trúc SPN có kích thước khối 128 bit.
2.2. XÂY DỰNG TIÊU CHUẨN THAM SỐ CHO HỆ MẬT RSA
Hệ mật mã hóa khóa công khai RSA
Hệ thống mật mã RSA được phát minh bởi ba tác giả Ron Rivest, Adi Shamir
và Leonard Adleman. Độ an toàn của hệ thống mật mã RSA dựa trên tính khó của
bài toán phân tích số nguyên ra các thừa số nguyên tố. Hiện nay RSA là hệ thống
mật mã khóa công khai được dùng phổ biến nhất trong các ứng dụng bảo mật thông
tin. Nó được sử dụng để cung cấp sự đảm bảo tính bí mật và các chữ ký số.
- Bộ tham số hệ mật RSA: (N, e, d) được gọi là bộ tham số RSA
- Số nguyên N được gọi là RSA modulo.
- Khóa công khai RSA là cặp (N, e), khóa bí mật là cặp (N, d)
46
Độ an toàn: là một giá trị có liên quan đến lượng công việc cần phải thực hiện
(số lượng phép toán) để phá vỡ một thuật toán hoặc một hệ thống mật mã.
2.2.1. Một số tiêu chuẩn tham số RSA an toàn đã được công bố
Tiêu chuẩn tham số RSA trong ANSI X9.31 [2]
Chuẩn X9.31 do Viện Chuẩn Quốc gia Mỹ (ANSI) phê chuẩn vào tháng 09
năm 1998.
- Tiêu chuẩn tham số cho e và d
+ e là số nguyên dương thoả mãn
e có thể là cố định hoặc được chọn ngẫu nhiên.
và thoả mãn
+ d được tính bởi công thức
- Tiêu chuẩn về độ dài modulo
Trong chuẩn X9.31 không đề xuất cụ thể về độ dài modulo tối thiểu được
dùng đến một năm nào đó, mà chỉ đưa ra độ phức tạp tính toán, dung lượng lưu trữ
khi sử dụng thuật toán sàng trường số để phân tích một số modulo có độ dài cho
trước. Chuẩn X9.31 khuyến cáo sử dụng modulo có độ dài 1024+256s, s0
Tiêu chuẩn tham số RSA có trong NIST 800-57 [57]
NIST 800-57 được NIST công bố vào tháng 3 năm 2007. Dưới đây là bảng liệt
kê độ an toàn tối thiểu của hệ mật RSA tương ứng với các độ dài modulo được đưa
ra bởi NIST 800-57.
nlen 1024 2048 3072
security_strength min. 80 min. 112 min. 128 - Độ dài tối thiểu của RSA modulo
Độ dài tối thiểu của RSA modulo dùng đến một năm cho trước
Thời gian sống an toàn của thuật toán Đến năm 2010 Độ dài tối thiểu modulo (nlen) 1024 bít
47
Đến năm 2030 Sau năm 2030 2048 bít 3072 bít
Tiêu chuẩn tham số RSA trong FIPS 186-3 [16]
Chuẩn FIPS 186-3 do Viện Công nghệ Tiêu chuẩn quốc gia Mỹ (NIST) phê
duyệt và công bố chính thức vào tháng 6 năm 2009.
- Tiêu chuẩn cho số mũ công khai e
Số mũ công khai e nên được chọn trước khi sinh p, q và số mũ bí mật d. Số mũ
e là số nguyên lẻ thoả mãn: 216 < e < 2256
- Tiêu chuẩn cho số mũ bí mật d
Số mũ bí mật d là giá trị nguyên dương thoả mãn d > 2nlen/2,
và .
Tiêu chuẩn Việt nam TCVN 7635:2007 [64]
- Độ dài tối thiểu của RSA modulo
Thời gian sử dụng Độ an toàn Nlen tối thiểu
Tới năm 2010 80 1024 bit
Tới năm 2030 112 2048 bit
Sau năm 2030 128 3072 bit
- Tiêu chuẩn cho số mũ công khai e
Chọn trước e là số mũ công khai thỏa mãn
- Tiêu chuẩn cho số mũ bí mật d
Số mũ bí mật d là giá trị nguyên dương thoả mãn d > 2nlen/2,
và .
Ngoài các tiêu chuẩn đã công bố, trong một số nghiên cứu, luận án tiến sỹ
cũng đã tập trung nghiên cứu, đề xuất tiêu chuẩn tham số an toàn và cách sinh tham
số, sử dụng an toàn hệ mật RSA [61] trong một số lĩnh vực chuyên biệt. Tuy nhiên,
các nghiên cứu này mới đưa ra về mặt định tính cho các lựa chọn tham số e mà
chưa đưa ra cơ sở khoa học để chứng minh và tiêu chuẩn an toàn của tham số khóa
công khai e.
48
2.2.2. Phương pháp xác định ngưỡng an toàn của Lenstra và Verheul
Để làm cơ sở nền tảng, đầu tiên luận án trình bày phương pháp của Arjen
K.Lenstra và Eric R.Verheul, vận dụng phương pháp của hai tác giả trên cơ sở các
luận cứ riêng của tác giả để xác định ngưỡng an toàn theo các luận cứ này.
Một số căn cứ để giải quyết bài toán xác định ngưỡng an toàn và xác định độ
dài modulo tối thiểu cho hệ mật RSA được Lenstra và Verheul đưa ra trong [4], [5]
như sau:
2.2.2.1. Ngưỡng an toàn
Ta có thể định nghĩa về ngưỡng an toàn đến thời điểm y là số lượng các phép
tính mà đối tượng tấn công không thể thực hiện được cho đến thời điểm trên.
Lenstra và Verheul đã xác định tham số trên theo các giả thiết dưới đây:
Giả thiết 1: Hệ mật DES được phép sử dụng cho đến năm 1982, có nghĩa là, hệ
mật này được chấp nhận còn an toàn cho đến năm 1982. Biết rằng, để thám hệ mật
này, ta cần đến một chi phí tính toán cỡ 0,5 MY, với MY là số phép toán thực hiện
được trong 1 năm của một bộ vi xử lý có tốc độ 1 Mega flops, hay:
1MY = 10631.536.000 244,8 (2.1)
Để ước lượng sức mạnh tính toán mà đối tượng tấn công có được trong tương
lai, Lenstra và Verhuel đã sử dụng theo luật Moore như sau.
Giả thiết 2 (Định luật Moore): Sức mạnh tính toán của bộ vi xử lý được nhân
đôi sau mỗi 18 tháng với giá thành không đổi.
Từ cách áp dụng luật Moore, ta có thể xem xét sự thay đổi về tiềm năng kinh
tế. Ví dụ, tổng sản phẩm quốc nội Mỹ chỉ ra xu hướng tăng gấp đôi sau mỗi 10 năm,
cụ thể năm 1975 là 1630 tỷ USD, năm 1985 là 4180 tỷ USD, năm 1995 là 7269 tỷ
USD.
Giả thiết 3: Điều trên dẫn đến giả thiết là sức mạnh kinh tế của mỗi tổ chức
cũng được tăng gấp đôi sau mỗi 10 năm.
49
Ký kiệu IMY(y) là số các MY không thể thực hiện vào năm đó hay là ngưỡng
an toàn tại năm y tính theo đơn vị MY. Dựa trên các giả thiết từ 1 đến 3, giá trị
IMY(y) được tính theo công thức dưới đây:
IMY(y) = 0,5 (MY) = (2.2) (MY)
2.2.2.2. Độ dài modulo của hệ mật RSA
a) Giả thiết về tiến bộ mã thám
Khi phân tích những tiến bộ về việc giải bài toán phân tích số nguyên ra thừa
số nguyên tố từ những năm 70 đến năm 2000, Lenstra và Verheul đưa ra giả thiết 4
trong [4] như sau:
Giả thiết 4: Đối với hệ mật RSA, tác dụng của các tiến bộ mã thám cũng tăng
trưởng theo luật Moore, cụ thể cứ sau 18 tháng thì việc phá vỡ hệ mật này sẽ giảm
chi phí đi một nửa.
Phương pháp tiên tiến nhất để giải bài toán phân tích số nguyên ra thừa số là
phương pháp sàng trường số NFS (Number Field Sieve). Thời gian tính tiệm cận
theo phương pháp này được cho bởi công thức sau:
(2.3)
Xuất phát từ cơ sở là khóa RSA-512 được phá trong năm 1999 bằng phương pháp NFS với chi phí không đến 104 MY mà theo công thức (2.3) thì chi phí để phá
khóa nói trên phải là:
(2.4)
Như vậy, ta có thể coi chi phí thật của việc phá các khóa RSA-n, ký hiệu là
T[2n], được tính theo công thức sau:
(2.5)
b) Công thức tính độ dài modulo cho hệ mật RSA
50
Kết hợp với giả thiết 4 thì hệ mật RSA-n muốn an toàn đến năm y cần phải
thỏa mãn bất đẳng thức dưới đây:
(2.6)
2.2.2.3. Bảng tính ngưỡng an toàn và độ dài modulo an toàn cho hệ mật RSA
Từ (2.2) và (2.6), Lenstra và Verheul đưa ra bảng tính 2 tham số a(y) là số mũ
lũy thừa 2 của vế phải (2.2) và n(y) là độ dài modulo cho hệ mật RSA theo các năm
y từ 2015 đến 2025, được trình bày trong bảng 2.1.
a(y) n(y) y a(y) y a(y) n(y) y n(y)
2015 82 1613 2016 83 1664
2017 83 1717 2018 84 1771 2019 85 1825
2020 86 1881 2021 86 1937 2022 87 1995
2023 88 2054 2024 88 2113 2025 89 2174
Bảng 2.1. Bảng tính a(y) và n(y) cho lĩnh vực kinh tế - xã hội
của Lenstra và Verheul
2.2.3. Xác định ngưỡng an toàn theo quan điểm riêng
Phần này trình bày việc đưa ra các luận cứ để xây dựng lại các giả thiết và từ
đó đưa ra công thức tính ngưỡng an toàn cho các năm tương lai thứ y với năm gốc
tính toán là y0 = 2016.
2.2.3.1. Luận cứ xác định đối tượng tấn công
Đối tượng tấn công vào các thông tin kinh tế - xã hội có tiềm năng nhất về mặt
tính toán là đối tượng có trong tay siêu máy tính với tốc độ cao nhất tại thời điểm
hiện tại.
Theo tin từ [71], đến tháng 6 năm 2016, siêu máy tính mạnh nhất trên thế giới
là Sunway TaihuLight của Trung Quốc có tốc độ 33,86 petaflop/s. Như vậy, số
phép toán trong 1 năm mà siêu máy tính này thực hiện được là:
33,869 244,8 290,5 (2.7)
51
Giả sử rằng đối tượng tấn công vào khu vực thông tin kinh tế - xã hội sẽ có
năng lực của siêu máy tính mạnh nhất trên thế giới với giá thành 100 triệu USD.
Với khả năng tính toán tối đa như trên, ta hoàn toàn có thể đưa ra ngưỡng an toàn là
con số gấp 10 lần khả năng nói trên, nghĩa là cỡ .
Do vậy, giả thiết mà nghiên cứu sinh muốn đưa ra là:
Giả thiết 5: Ngưỡng an toàn trong lĩnh vực kinh tế - xã hội tại thời điểm 2016,
ký hiệu là A(2016) được cho như sau:
A(2016) = 294 (2.8)
Nếu giả thiết 2 trong phần trên chỉ là sức mạnh tính toán của bộ vi xử lý được
nhân đôi sau mỗi 18 tháng với giá thành không đổi thì trong thời gian gần đây có
nhiều ý kiến cho rằng, thông số trên được rút ngắn chỉ còn là sức mạnh tính toán
của bộ vi xử lý được nhân đôi sau mỗi 12 tháng với giá thành không đổi. Thay cho
giả thiết 2 trong phần 1 (có lẽ đã lạc hậu ở thời điểm hiện tại), luận án đưa ra giả
thiết 6 dưới đây:
Giả thiết 6: Sức mạnh tính toán của bộ vi xử lý được nhân đôi sau mỗi một
năm với giá thành không đổi.
2.2.3.2. Công thức xác định các ngưỡng an toàn cho đến năm y (y2016)
Với các phân tích để đưa ra các giả thiết mới trong mục trên, ta sẽ tính được
các ngưỡng an toàn cho đến năm y cho các thông tin cần bảo vệ trong lĩnh vực Kinh
tế - Xã hội, ký hiệu là A(y), bởi công thức dưới đây:
(2.9)
Với ngưỡng an toàn được tính theo công thức (2.9) nên công thức tính độ dài
modulo cho hệ mật RSA cũng thay đổi. Cụ thể, công thức xác định tham số này
(vẫn giữ nguyên giả thiết 4 về tiến bộ mã thám cũng như công thức (2.5) về chi phí
phân tích thực tế của số n bits theo phương pháp NFS) từ (2.6) ta thu được:
(2.10)
52
Để tường minh trong việc tính toán, trước hết tác giả tính toán và biểu diễn
dưới dạng lũy thừa 2 của hệ số và biểu thức L[2n].
Để thuận lợi cho tính toán, ta biến đổi công thức (2.2) về thời gian tính của
phương pháp NFS với N = 2n.
Logarit cơ số 2 hai vế của (2.2) sau khi đã bỏ qua đại lượng giống như
lập luận của Lenstra và Verheul, ta thu được:
Với n = 512 ta có:
Từ công thức (2.1) ta có: 104 MY 258.1
Do đó, ta có:
Khi đó, (2.10) tương đương với bất đẳng thức dưới đây:
(2.11)
Chú ý rằng, theo giả thiết 5 thì log2(A(2016)) = 94. Nghiên cứu sinh đã thực
hiện tính toán các giá trị a(y) (số mũ lũy thừa 2 của A(y)) và n(y) (giá trị n tương
ứng với năm y trong công thức 2.11, là kích thước tối thiểu của modulo của hệ mật
RSA để cho hệ mật này an toàn đến năm y) với y từ 2016 đến 2025. Kết quả tính
được trình bày trong bảng 2.2 sau đây (sử dụng công cụ tính toán online từ trang
web Wolframalpha.com).
53
2016
94
1821
2021
100
2180
2017
96
1890
2022
101
2257
2018
97
1960
2023
102
2335
2019
98
2032
2024
103
2415
2020
99
2105
2025
104
2496
y a(y) n(y) y a(y) n(y)
Bảng 2.2. Bảng tính các giá trị a(y) và n(y) cho lĩnh vực Kinh tế - Xã hội
Tóm lại, vấn đề quan trọng nhất đạt được ở phần trên là phương pháp luận để
xác định ngưỡng an toàn cho những hệ mật có độ an toàn dựa trên độ phức tạp tính
toán. Các giá trị về ngưỡng an toàn trong lĩnh vực kinh tế - xã hội là cơ sở để xây
dựng hệ tiêu chuẩn cho hệ mật RSA và lựa chọn hệ mật dùng trong các ứng dụng.
So sánh với kết quả được công bố trên thế giới theo [73], tính theo năm 2016,
các phương pháp đưa ra độ an toàn như bảng sau đây.
Phương pháp Năm
Kích thước khóa an toàn Độ an toàn cho DLP Độ an toàn cho ECC
83 96 Độ an toàn cho phân tích số (RSA) 1664 1776 158 192 158 192 Độ an toàn cho hàm băm 158 192
112 2048 224 224 224 Lenstra&Verhuel ECRYPT II (Châu Âu) NIST (Mỹ)
128 100 2048 2048 256 200 256 200 256 200 BSI (Đức) ANSSI (Mỹ)
Luận án 94 -104 1821 - 2835 2016 2016- 2020 2011- 2030 2016 2014- 2020 2016- 2025
Bảng 2.3. Bảng giá trị ngưỡng an toàn theo các phương pháp
Theo kết quả thống kê trong bảng 2.3 giá trị ngưỡng an toàn và độ dài modulo
của hệ mật RSA do luận án đề xuất trong lĩnh vực kinh tế - xã hội là hoàn toàn phù
hợp với chuẩn chung của thế giới đã công bố và đảm bảo tính an toàn theo thời gian
đến năm 2025.
54
2.2.4. Phương pháp mã hóa liên tiếp và tiêu chuẩn cho số công khai
Trong mục này luận án trình bày về một tấn công hiệu quả sử dụng phương
pháp "mã hóa liên tiếp" để giải bài toán RSA trong trường hợp số mũ công khai e
có đủ nhỏ. Dựa vào đó, luận án phát triển thuật toán giải bài toán RSA
thành thuật toán phân tích modulo N của hệ RSA hiệu quả trong trường hợp chỉ cần
hoặc đủ nhỏ. Kết quả là luận án đề xuất bổ xung thêm một tiêu
chuẩn cho số mũ công khai e cùng với việc tìm các số nguyên tố chứng minh được
sự thỏa mãn tiêu chuẩn đã đưa ra cho hệ RSA.
2.2.4.1. Một số công thức, định nghĩa
Hàm -Euler. . Ta có:
(2.12)
Cấp của phần tử trong nhóm.
Cho G là một nhóm nhân hữu hạn với đơn vị ký hiệu là 1. Khi đó với mọi
phần tử luôn tồn tại số tự nhiên d sao cho , ký hiệu là
, bằng đơn vị. Tức là
(2.13)
Giá trị d nhỏ nhất thỏa mãn công thức (2.13) được gọi là cấp của a trong
G và được ký hiệu là . Trong trường hợp thì còn
được ký hiệu là .
(N): Cấp lớn nhất của các phần tử trong nhóm .
Công thức tính (N) và (N). Nếu với pi là các số nguyên tố khác
nhau thì
(2.14)
55
(2.15)
Ngưỡng an toàn tính toán
Ngưỡng an toàn tính toán (thường được xét đến một thời điểm cụ thể) là một
con số, ký hiệu là A, sao cho mọi tổ chức, cá nhân đều không thể thực hiện được A
phép tính cho đến thời điểm được xét.
2.2.4.2. Giải bài toán RSA bằng phương pháp mã hóa liên tiếp
Bài toán RSA. Cho bản mã C được mã hóa bởi hệ mật RSA với tham số công
khai (N, e). Hãy tìm M sao cho
.
a) Thuật toán 1
Tấn công mã hóa liên tiếp [28], [32] nhằm tìm bản rõ M từ bản mã C theo hệ
mật RSA với bộ tham số công khai (N, e) được thực hiên theo thuật toán sau đây.
;
;
Thuật toán 1. (Mã hóa liên tiếp giải bài toán RSA) Input: C, (N, e) Ouput: M thỏa mãn 1. M C; 2. X 3. while (X C) do 3.1 M X; 3.2 X 4. return M; b) Phân tích thuật toán 1
Trước hết chúng ta thấy rằng nếu thuật toán dừng tức là X = C thì với X được
tính theo bước 2 hoặc bước 3.2
ta có ngay:
Đẳng thức trên có nghĩa đầu ra của thuật toán đúng là bản rõ cần tìm. Việc còn
lại của chúng ta ở đây là chứng tỏ thuật toán 1 luôn dừng và xác định độ phức tạp
tính toán của nó.
Kết quả 1. Thuật toán 1 sẽ dừng sau đúng vòng lặp ở bước 3.
Chứng minh.
56
Với M xuất phát từ bước 1 chính là C nên X thu được tại bước 2, ký hiệu là X0
chính là
(2.16)
Ký hiệu giá trị X tính được tại vòng lặp thứ t (t 1) ở bước 3 là Xt, theo bước
3.2 ta có và theo bước 3.1 thì M = Xt1 vậy ta có
(2.17)
Từ (2.16) và (2.17) ta thu được
(2.18)
Với thì (2.18) trở thành
(2.19)
Biết rằng với mọi giá trị và với mọi số nguyên dương m ta có:
(2.20)
theo định nghĩa về cấp thì nên thay (2.20) với
vào (2.19) thì vế phải của nó chính là C vậy Kết quả 1 đã được chứng minh.
Từ kết quả trên ta có
Hệ quả 1. Chi phí tính toán của thuật toán 1 là phép lũy thừa với số
mũ e trong .
Như vậy, nếu e có đủ nhỏ thì theo hệ quả 1, người tấn công sẽ luôn
giải được bài toán RSA và khi này hệ RSA sẽ không an toàn.
2.2.4.3. Phân tích modulo n của hệ RSA bằng phương pháp mã hóa liên tiếp
a) Thuật toán 2
Việc phân tích modulo N của hệ mật RSA với bộ tham số công khai (N, e)
theo phương pháp mã hóa liên tiếp được thực hiện theo thuật toán sau.
57
Thuật toán 2. (Mã hóa liên tiếp phân tích modulo N)
Input: (N, e) là bộ tham số khóa công khai RSA;
Ouput: p là ước nguyên tố của N;
1. X random(1, N); Y X;
2. p gcd(X, N);
3. while (p {1, N}) do
3.1 X Xe mod N;
3.2 p gcd(X Y, N);
4. return p
b) Phân tích thuật toán 2
Kết quả 2. Giả sử N = pq và nếu các điều kiện sau đây được thỏa mãn:
(2.21)
Giá trị Y lấy trong bước 1 thỏa mãn
(2.22)
thì thuật toán 2 sẽ dừng với đầu ra là ước nguyên tố p của N.
Chứng minh.
Không giảm tính tổng quát, giả sử , giống như lập luận đã
sử dụng để chứng minh Kết quả 1 ta có giá trị X tính được ở vòng lặp thứ t, ký hiệu
mod N với X là giá trị được lấy trong bước 1 là Xt, của bước 3 chính là
và do đó ta có
(2.23)
Xét phần dư theo phép chia cho p cả hai vế của (2.23) ta được
(2.24)
58
Với ta có và vì vậy vế phải của (2.24) chính là
hay
(2.25)
Tương tự, xét phần dư theo phép chia cho q cả hai vế của (2.33) ta được
(2.26)
Từ giả thiết nên giá trị
đồng thời với giả thiết (2.22) ta có
(2.27)
Từ (2.25) và (2.27) cho thấy là bội của p nhưng không là bội của q và
điều này dẫn đến
Cho nên thuật toán dừng và đầu ra chính là ước nguyên tố của N. Tóm lại Kết
quả 2 đã được chứng minh.
Giống như Kết quả 1 ta có hệ quả sau.
Hệ quả 2. Chi phí tính toán của thuật toán 2 là
phép lũy thừa với số mũ e và m phép tìm ước chung lớn nhất của hai số nguyên
trong .
2.2.4.4. Tiêu chuẩn cho tham số e
a) Tiêu chuẩn
Để chống được tấn công thám mã được đưa ra trong Thuật toán 1 ta cần đến
điều kiện về tham số e là
, (2.28)
với A là ngưỡng an toàn tính toán, bởi vì khi này theo hệ quả 1 thì chi phí để thực
hiện Thuật toán 1 là vượt quá khả năng của người tấn công.
59
Để chống được tấn công phân tích số N được đưa ra trong Thuật toán 2 chúng
ta có thể đưa ra đề xuất về tham số e đó là thỏa mãn ít nhất một trong hai điều kiện
sau:
(2.29)
Hoặc
(2.30)
Hiển nhiên (2.29) là điều kiện không thành công của Thuật toán 2, còn (2.30)
làm cho chi phí để thực hiện thành công Thuật toán 2 là vượt quá khả năng của kẻ
tấn công.
Rõ ràng nếu thỏa mãn điều kiện (2.30) thì (2.28) cũng được thỏa mãn, do đó
việc thỏa mãn (2.30) là đủ để chống lại cả hai tấn công đã trình bày. Cho nên tiêu
chuẩn cho tham số e được luận án đưa ra như sau:
Tiêu chuẩn: Số mũ công khai e thỏa mãn điều kiện (2.30)
b) Vấn đề kiểm tra sự thỏa mãn tiêu chuẩn của tham số e
Biết rằng trong tất cả các tiêu chuẩn cho bộ tham số của hệ RSA đã được ban
hành trên thế giới chẳng hạn [2], [16], [17], [64], thì việc sinh các tham số luôn
được bắt đầu từ chọn e sau đó rồi mới đến tìm các tham số nguyên tố p và q sao cho
bộ tham số thỏa mãn toàn bộ các tiêu chuẩn.
Bây giờ muốn kiểm tra điều kiện (2.30) cho tham số e ta cần tính được hay ít
ra cũng phải ước lượng được hai giá trị và . Do là ước
của và là ước của nên việc ước lượng hai giá trị nói
trên có thể được thực hiện bởi kết quả sau đây.
Bổ đề 1. Cho N là một số nguyên dương, r là ước nguyên tố của .
Khi đó nếu
(2.31)
60
thì là bội của với .
Như vậy, nếu giá trị r nêu trong Bổ đề 1 thỏa mãn thì ta có ngay
cho nên bằng cách chỉ ra được các số nguyên tố và không nhỏ
hơn A tương ứng là ước của và thì việc kiểm tra sự thỏa mãn
Tiêu chuẩn 1 được thực hiện dễ dàng thông qua sự thỏa mãn điều kiện (2.31) với N
lần lượt thay bằng p và q. Khi đó cặp sẽ là bằng chứng thỏa mãn
tiêu chuẩn.
c) Vấn đề tìm số nguyên tố thỏa mãn tiêu chuẩn cho e
Hiển nhiên các số nguyên tố p có đủ bằng chứng thỏa mãn tiêu chuẩn với tham
số e phải thỏa mãn hai điều kiện sau:
Thứ nhất:
có ước nguyên tố (2.32)
Thứ hai:
(2.33)
Từ đó bằng việc sinh ngẫu nhiên một số nguyên tố rồi tìm ngẫu nhiên
một số nguyên tố trong tập { nguyên dương} thì các số nguyên tố
p trong tập { nguyên dương} sẽ thỏa mãn . Nói một cách
khác là điều kiện (2.32) đã được thỏa mãn. Bằng kiểm tra thêm điều kiện (2.33) để
có được số nguyên tố cần tìm.
2.3. MỘT ĐỀ XUẤT MA TRẬN AN TOÀN, HIỆU QUẢ CHO TẦNG TUYẾN
TÍNH TRONG CÁC MÃ PHÁP DẠNG AES
Trong thiết kế mã khối, Shannon đã đưa ra 2 nguyên lý cơ bản là xáo trộn
(confusion) và khuếch tán (diffusion) [42]. Nguyên lý xáo trộn được mô tả là sử
dụng các biến đổi mã hóa làm phức tạp quan hệ thống kê của bản mã vào bản rõ,
hoặc nói ngắn gọn là làm cho quan hệ giữa khóa và bản mã càng phức tạp càng tốt.
61
Trong khi đó tính khuyếch tán tốt là tính dàn trải ảnh hưởng của các đặc tính bản rõ
ban đầu qua bản mã càng nhiều càng tốt, do đó giấu đi các tính chất của bản rõ.
Các mã khối thông thường được đánh giá qua các tiêu chí quan trọng là độ an
toàn, chi phí cài đặt, hiệu năng thực hiện. Các tiêu chí này thường được xem xét và
phân tích chi tiết trong các dự án lựa chọn chuẩn mã khối trên thế giới như dự án
CRYPTREC [75], dự án NESSIA [76] và NIST [77] để lựa chọn chuẩn mã khối
AES. Trong đó, đối với việc phân tích chi phí cài đặt và hiệu năng của thuật toán
thường được xem xét và đánh giá dựa trên cài đặt phần cứng và phần mềm trên
nhiều nền tảng và thiết bị khác nhau dựa trên định hướng của môi trường sử dụng.
+ Độ an toàn: đây là yếu tố quan trọng nhất trong đánh giá mã khối. Các chức
năng trong nhóm này gồm khả năng chống lại các tấn công thám mã đã biết,
có tính hoàn thiện về cơ sở toán học, tính ngẫu nhiên của đầu ra.
+ Tính hiệu quả: là tiêu chuẩn quan trọng thứ hai mà nó bao gồm các yêu cầu về
tính hiệu quả trong tính toán (tốc độ) trên nhiều platform khác nhau, yêu cầu
về bộ nhớ.
+ Các đặc trưng cài đặt và thuật toán: bao gồm độ phức tạp, khả năng cài đặt
trên phần cứng, phần mềm, tính đơn giản của thuật toán.
Các thành phần của mã khối:
Để thực hiện hai nguyên lý là “khuếch tán” và “xáo trộn” thì trong mỗi vòng
của mã khối thường được thiết kế với 2 tầng biến đổi riêng và đan xen nhau:
+ Tầng tuyến tính (còn gọi là tầng khuếch tán): thường được thực hiện bởi một
biến đổi tuyến tính như nhân ma trận, dịch hàng hoặc hoán vị trí của các bít.
+ Tầng phi tuyến (tầng xáo trộn): thường được thực hiện bởi phép biến đổi phi
tuyến - có thể là bởi một biến đổi thay thế (S-Box) hoặc bởi một cấu trúc đặc
biệt có tính chất phi tuyến.
Trong mục này, luận án đề xuất và đánh giá tầng tuyến tính có tính chất cài đặt
hiệu quả trong phần cứng dựa trên ma trận tựa vòng có thể sử dụng trong thiết kế
tầng tuyến tính cho các mã pháp dạng AES. Trên cơ sở lý thuyết những nghiên cứu
62
trước đó, luận án đánh giá số lượng điểm bất động của tầng khuếch tán nhận được.
Đồng thời tiến hành khảo sát và đánh giá các ma trận tựa vòng nhằm lựa chọn ra
một ma trận phù hợp cho việc xây dựng một tầng khuếch tán cho mã khối có cấu
trúc SPN có kích thước khối 128 bit.
2.3.1. Một số định nghĩa, khái niệm
Trước hết, luận án nêu lại một số định nghĩa, khái niệm cũng như những kiến
thức cần thiết trong nghiên cứu của luận án. Đầu tiên chúng ta sẽ xem xét khái niệm
ma trận dịch vòng (hay còn gọi là ma trận vòng) và ma trận tựa vòng.
Định nghĩa 1. Ma trận dịch vòng là ma trận mà các hàng (hoặc các cột) của
nó nhận được từ hàng (cột) trước nó bằng cách dịch vòng đi một phần tử.
Theo đó một ma trận có dạng:
(2.34)
được gọi là ma trận dịch vòng (circulant matrix), ký hiệu là
. Trong trường hợp thiết kế tầng tuyến tính như trong AES, ma
trận tuyến tính sử dụng phải có kích thước 4x4, có nghĩa rằng d = 4.
Định nghĩa 2 [35]. Ma trận tựa vòng kích thước là ma trận có dạng
,
trong đó , , với .
Ma trận này về sau ký hiệu là .
Trong thiết kế mã khối cần đảm bảo số nhánh lớn nhất có thể, để đảm bảo tính
chất này trong thiết kế của nhiều mã pháp thực tế sử dụng các ma trận MDS [12].
Xét định nghĩa ma trận MDS sau đây.
63
Định nghĩa 3 [33]. Ma trận vuông kích thước dxd là một ma trận MDS khi và chỉ
khi tất cả các ma trận con vuông của nó không suy biến.
Đối với mỗi ma trận MDS kích thước dxd được sử dụng trong tầng tuyến tính.
Số nhánh của nó chính bằng khoảng cách nhỏ nhất giữa các từ của mã tuyến tính,
với điều kiện mã tuyến tính này sử dụng ma trận MDS nói trên trong thành phần ma
trận sinh của nó [33]. Trong trường hợp này, số nhánh sẽ bằng d + 1.
Một tham số nữa liên quan đến độ an toàn của tầng tuyến tính đó là số điểm
bất động. Trong [12] tác giả đưa ra khái niệm điểm bất động của tầng tuyến tính
, trong đó , A là ma trận không suy biến kích thước
dxd. Như vậy, số lượng điểm bất động của biến đổi tuyến tính trên chính là số
nghiệm của hệ phương trình
,
trong đó I là ma trận đơn vị kích thước . Từ đó, số lượng điểm bất động cho
biến đổi tuyến tính nói trên được tính theo công thức sau:
.
Như vậy, số lượng các điểm bất động phụ thuộc vào hạng của ma trận
Tồn tại nhiều tầng tuyến tính mà ở đó có nhiều điểm bất động, tuy nhiên số nhánh
của tầng tuyến tính này vẫn được đảm bảo mặc dù giá trị đầu ra không bị ảnh hưởng
bởi tác động của biến đổi tuyến tính này. Nhưng thực tế trong [55] đưa ra những
nghiên cứu chứng tỏ tồn tại những tấn công tiềm ẩn khi sử dụng điểm bất động của
tầng tuyến tính.
Trong phần tiếp theo, luận án sẽ đánh giá độ phức tạp khi cài đặt đối với ma
trận dịch vòng MDS và tựa vòng sử dụng trong biến đổi MixColumns.
2.3.2. Phép MixColumns sử dụng ma trận dịch vòng và ma trận tựa vòng 4x4
Khi phân tích đề xuất ma trận 4x4 tựa vòng và khi so sánh với các ma trận
vòng luận án chỉ qua tâm đến hai dạng ma trận là và
.
64
Đối với tầng tuyến tính sử dụng ma trận dạng (như trong AES),
phép biến đổi MixColumns trong đó thực hiện phép nhân ma trận :
,
trong đó .
Để tính được một phần tử, ví dụ , ta cần thực hiện phép cộng XOR 4 số hạng.
Trong hầu hết các tài liệu khi đánh giá về tài nguyên cài đặt đối với tầng tuyến
tính dạng này, thường chỉ xét đến đánh giá độ phức tạp của phép nhân một hàng
trong ma trận tuyến tính với một cột trong ma trận dữ liệu.
Trong trường hợp sử dụng ma trận tựa vòng, phép biến đổi MixColumns đó
thực hiện phép nhân ma trận :
,
trong đó . Để tính được các phần tử
, ví dụ đối với , ta cần thực hiện
Đối với các phần tử còn lại trong ma trận Y, ví dụ đối với , ta cần thực hiện
Tiếp theo luận án cũng sẽ phân tích độ phức tạp của một số ma trận 4x4 sử
dụng trong tầng biến đổi tuyến tính dạng AES.
65
2.3.3. Phân tích phép biến đổi MixColumns của AES
Ma trận tuyến tính trong biến đổi MixColumns của chuẩn mã hóa AES là một
ma trận 4x4 với các phần tử thuộc trường hữu hạn với đa thức sinh là đa thức
bất khả quy .
Để thực hiện phép biến đổi này ta cần thực hiện phép nhân với phần tử 2 (biểu
diễn ở dạng nhị phân là 00000010) và 3 (00000011) trong trường hữu hạn đang xét.
Biểu thức phép nhân phần tử a với 2 trên trường đang xét có dạng như trong công
thức (2.35).
(2.35) (2.36) , (2.37)
trong đó . Như vậy, phép
nhân này cần sử dụng 3 cổng XOR với đầu vào 2 bit và đầu ra 1 bit. Tuy nhiên, khi
thực hiện phép nhân với 3 yêu cầu 11 cổng. Biểu thức cho phép nhân phần tử a với
3 có dạng như trong công thức (2.36). Trong (2.36) ta thấy biểu thức tính các cặp bit
hoặc có một số thành phần giống nhau. Như vậy ta có thể viết lại
biểu thức tính các bít đầu ra khi thực hiện phép nhân với phần tử 3 như trong biểu
66
thức (2.37). Theo đó phép nhân này chỉ yêu cầu 9 cổng XOR thay vì 11 như những
cài đặt trước đó.
Như vậy số cổng XOR cần thiết cho cài đặt phép nhân một hàng của ma trận
trong MixColumns với một cột của ma trận dữ liệu bằng 12 + 3x8 = 36. Còn để
thực hiện toàn bộ biến đổi MixColumns sẽ cần 16x36 = 576 cổng XOR.
Trong [43], nhóm tác giả đã đề xuất một dạng ma trận MDS Hadamard có tính
chất cuộn. Tính chất cuộn ở đây có nghĩa rằng ma trận tuyến tính cũng chính là
nghịch đảo của nó, tính chất cuộn nhằm hướng đến mục đích cho những thiết kế
hạng nhẹ vì khi đó chỉ cần sử dụng một modul mà có thể dùng cho cả quá trình mã
và giải mã. Tuy nhiên, khi áp dụng vào mô hình tầng tuyến tính dạng AES thì những ma trận Hadamard MDS cuộn lại cho tầng tuyến tính có 216 điểm bất động.
Do vậy, trong phần này luận án sẽ xem xét và phân tích một trong những đề xuất
ma trận cụ thể trong [43], mà không có tính chất cuộn.
Trên trường với đa thức sinh là đa thức nguyên
thủy , trong [43] đề xuất ma trận Had(0x1, 0x2, 0x4,
0x91) = Had(1, 2, 4, 145). Phép nhân phần tử a với 0x2, 0x4 và 0x91 trường này
tương ứng có biểu thức toán học (2.38), (2.39) và (2.40) dưới đây:
(2.38) (2.39) (2.40)
Các ma trận Hadamard là những ma trận mà mỗi hàng (hoặc mỗi cột) có các
phần tử giống nhau, đây chính là một lợi thế trong cài đặt. Trong [43] nhóm tác giả
đánh giá số tài nguyên cài đặt của phép nhân một hàng của ma trận Had(0x1, 0x2,
0x4, 0x91) với một cột của khối dữ liệu cần số cổng XOR là 13 + 3x8 = 37. Tuy
67
nhiên, theo luận án đánh giá này là chưa chặt vì nhóm tác giả không xét đến sự
trùng lặp trong những biểu thức trong phép nhân với 0x4 và 0x91. Trong biểu thức
(2.39) ta thấy rằng cặp , còn trong (2.40) cặp có những biểu thức
chung. Như vậy thực chất số cổng XOR cần thiết chỉ là 11 + 3x8 = 35. Tuy nhiên
ma trận Hadamard nói trên khi cài đặt tốn ít tài nguyên hơn. Còn để cài đặt toàn bộ
biến đổi MixColumns sẽ cần 16x35 = 560 cổng XOR.
Trong phần tiếp theo luận án trình bày một đề xuất ma trận tựa vòng có tính
chất cài đặt phần cứng tốt hơn.
2.3.4. Đề xuất ma trận tuyến tính tựa vòng cho AES
Các nguyên thủy mật mã được sử dụng trong thực tế có yêu cầu khi thiết kế là
phải lựa chọn sao cho an toàn, hiệu quả trên cả phần cứng và phần mềm. Như vậy,
trong trường hợp cài đặt các ma trận tuyến tính việc lựa chọn các hệ số trong mỗi
ma trận sẽ quyết định tính chất cài đặt của nó. Trong bất kỳ trường hữu hạn , với
đa thức sinh là đa thức bậc n thì phép nhân với phần tử 1, và là dễ dàng cài
đặt, ở đây g là phần tử nguyên thủy của trường (thông thường trên trường hữu hạn
với đa thức sinh là đa thức nguyên thủy ta thường chọn g = 2 [58]). Trong cài đặt
phần cứng phép nhân với phần tử 1 là tầm thường, có nghĩa rằng phép nhân này
không tốn tài nguyên, còn phép nhân với và có độ phức tạp như nhau. Do
vậy tốc độ cài đặt của chúng là nhanh hơn.
Mặt khác ma trận tựa vòng có dạng
(2.41)
mà luận án xem xét ở mục trước phải là một ma trận có tính MDS để đảm bảo tính
khuếch tán cực đại, có nghĩa là tất cả các ma trận con vuông của nó phải không suy
biến. Từ đây ta có một ràng buộc giữa các hệ số trong ma trận M như sau:
68
(2.42)
Ngoài ràng buộc trên các hệ số c, e và f phải được lựa chọn làm sao để dễ dàng
cài đặt trong cả phần cứng cũng như phần mềm. Thông thường những phần tử là bội
trên trường hữu hạn của phần tử g, hoặc nghịch đảo của nó, hoặc biểu thức “đơn giản” từ hai phần tử này, ví dụ như g + 1, hoặc g-1 + 1,… được ưu tiên lựa chọn, ví
dụ như hệ số bằng 3 (tức là bằng g + 1, với g = 2) như trong ma trận tuyến tính của AES [12], ví dụ như hệ số bằng 4 (bằng g2, với g = 2) như trong mã pháp LED
[22],…
Ta thấy rằng nếu đa thức là nguyên thủy, khi đó đa
thức liên hợp của nó cũng là nguyên thủy [12].
Như đã phân tích ở mục trước, luận án chỉ quan tâm đến các ma trận 4x4 trên
trường , do vậy chỉ quan tâm đến các đa thức bậc 8. Với giá trị n = 8,
và là hai đa thức liên
hợp của nhau. Hai đa thức nguyên thủy này cũng chính là 2 trong tổng số
đa thức nguyên thủy có thể có bậc bằng 8 (bảng 2.3), trong đó là
hàm Euler [58]. Do vậy, chúng có thể được sử dụng trong vai trò đa thức sinh của
trường .
69
Cũng cần phải nói thêm rằng đa thức trong [59]
đã được luận giải chi tiết bằng lý thuyết cũng như kiểm chứng bằng thực hành là đa
thức cho phép thực hiện phép tìm kiếm ma trận dịch vòng hiệu quả nhất. Tuy nhiên
đây không phải là đa thức duy nhất trong 16 đa thức nguyên thủy có thể. Bằng cách
luận giải tương tự như trong [59], ta thấy rằng đa thức liên hợp với f(x) là
cũng có tính chất tương tự. Do vậy chúng cho phép
tìm được nhiều các ma trận hiệu quả hơn.
STT Đa thức STT Đa thức
9 1
10 2
3 11
12 4
13 5
14 6
15 7
8 16
Bảng 2.4. Danh sách 16 đa thức nguyên thủy bậc 8 trên
Khi xây dựng trường với đa thức sinh là ,
phần tử nguyên thủy g = 2. Ta chọn các hệ số trong ma trận tựa vòng (2.41) như sau: c = f = g-1 và e = g2. Dễ dàng kiểm tra được rằng các hệ số này thỏa mãn điều
kiện (2.42). Do vậy ma trận
(2.43)
chính là một ma trận MDS.
70
Tương tự khi xây dựng trường với đa thức sinh là
, phần tử nguyên thủy là g = 2. Khi chọn các hệ số c
= f = g, còn e = g-2, ta có thể xây dựng ma trận MDS như sau:
(2.44)
Trong phần tiếp theo luận án sẽ phân tích một số tính chất mật mã khác của
ma trận đề xuất với ma trận tuyến tính trong AES và ma trận Hadamard MDS trong
[43] mà luận án đã phân tích ở mục trước.
2.3.5. Đánh giá cài đặt theo quan điểm phần mềm
Tài liệu mô tả chuẩn AES trình bày phương pháp cài đặt thuật toán trên môi
trường 32 bit sử dụng kỹ thuật tra bảng [29]. Theo đó phương pháp này có thể áp
dụng với ma trận MixColumns tuyến tính 4x4 bất kỳ. Bộ nhớ yêu cầu khi lưu toàn
bộ 4 bảng tra cho cài đặt biến đổi MixColumns này là 4096 Bytes (4KB). Với hệ
thống mạng máy tính hiện nay, bộ nhớ 4 KB là hoàn toàn không đáng kể. Tuy
nhiên, trên quan điểm người thiết kế nghiên cứu sinh mong muốn hướng đến những
môi trường hạng nhẹ, yêu cầu về tài nguyên cài đặt hạn chế. Do vậy, để có thể phân
tích cài đặt một cách tổng thể theo quan điểm phần mềm, trong mục này luận án chỉ
quan tâm đến độ phức tạp, hay nói chính xác hơn là số phép toán cần thiết khi cài
đặt mà không sử dụng kỹ thuật tra bảng (trong nhiều tài liệu gọi đây là phương pháp
cài đặt bit-slice[29]). Bản chất kỹ thuật này là thực hiện biến đổi tuyến tính khi xem
xét phép nhân trực tiếp với các hệ số của ma trận tuyến tính sử dụng trong biến đổi
MixColumns. Ta chỉ quan tâm đến biến đổi MixColumns bởi phép ShiftRows thực
tế cài đặt là không tốn tài nguyên.
Không giống như cài đặt phần cứng khi mà phép XOR được hiểu là cộng 2 bit
theo modulo 2 với nhau, ở đây phép XOR được hiểu là cộng từng bit theo modulo
của hai số 8 bit. Bây giờ chúng ta xét từng trường hợp cụ thể. Đối với ma trận dịch
vòng trong biến đổi MixColumns sử dụng trong AES, ký hiệu là Cir(2, 3, 1, 1).
71
Xét biểu thức nhân lần lượt 4 hàng của ma trận M với một cột của ma trận
trạng thái X. Ví dụ với y00:
Theo biểu thức này để tính 1 byte đầu ra cần 4 phép XOR hai số 8 bit và 1
phép Xtime. Phép Xtime là phép nhân với phần tử nguyên thủy hoặc là nghịch đảo
của nó trong trường hữu hạn [58]. Nếu ta đặt
,
khi đó
.
Tương tự ta có:
.
Như vậy, phép nhân lần lượt 4 hàng của ma trận M với một cột của ma trận dữ
liệu cần 15 phép XOR và 4 phép Xtime. Còn để thực hiện toàn bộ biến đổi
MixColumns cần 4x15 = 60 phép XOR và 4x4 = 16 phép Xtime.
Đối với ma trận Had(1, 2, 4, 145) trong [43]. Xét biểu thức
(2.45)
Thực hiện tính 1 byte dữ liệu đầu ra
72
Biểu thức này yêu cầu log28 + log24 + log22 + log22 = 7 phép Xtime và 5 phép
XOR. Do vậy, để thực hiện biểu thức (2.45) cần 16x7 = 112 phép Xtime và 16x5 =
80 phép XOR. Bảng 2.4 dưới đây là so sánh khi cài đặt theo quan điểm cài đặt phần
mềm khi không dùng kích thước bảng tra.
Đối với hai ma trận đề xuất, ví dụ với C.like1(149, Cir(1, 4, 149) xét biểu thức:
(2.46)
Từ biểu thức của ma trận ta thấy 4 giá trị và được tính giống
nhau khi nhân lần lượt hàng thứ nhất của ma trận tuyến tính với lần lượt các cột của
ma trận dữ liệu. Ví dụ với có:
.
Từ biểu thức này ta thấy để tính được toàn bộ 4 giá trị và cần
4x1 = 4 phép Xtime và 4x3 = 12 phép XOR.
còn lại được tính giống Mặt khác ta thấy 12 giá trị yij, với
nhau bởi 3 hàng còn lại trong ma trận tuyến tính có các số hạng giống nhau. Ví dụ
với có:
.
Biểu thức này yêu cầu 3 phép Xtime và 3 phép XOR. Như vậy việc tính toàn
sẽ yêu cầu 12x3 = 36 phép Xtime và 12x3 bộ 12 giá trị yij, với
= 36 phép XOR.
Từ đây ta có độ phức tạp để thực hiện toàn bộ biến đổi MixColumns là 36 + 4
= 40 phép Xtime và 36 + 12 = 48 phép XOR.
73
Tương tự độ phức tạp cho ma trận C.like2(2, Cir(1, 106, 2)) là 40 phép Xtime
và 48 phép XOR. Bảng 2.4 dưới đây là so sánh khả năng cài đặt trên môi trường 8
bit của các ma trận.
Ma trận XOR Xtime Ghi chú
Cir(2, 3, 1, 1) 60 16 [58]
Had(1, 2, 4, 145) 80 112 [43]
48 40 Đề xuất
48 40 Đề xuất C.like1(149, Cir(1 ,4, 149)) C.like2(2, Cir(1, 106, 2))
Bảng 2.5. So sánh cài đặt kiểu bit-slice các ma trận MDS 4x4
Qua bảng phân tích, rõ ràng rằng ma trận MDS trong AES yêu cầu số phép
toán ít hơn, còn ma trận MDS Hadamard trong [43] là không hiệu quả khi cài đặt
theo kiểu bit-slice và không thích hợp khi sử dụng trong cài đặt trên các môi trường
hạn chế khi so sánh với ma trận MixColumns trong AES và các ma trận MDS tựa
vòng mà luận án đề xuất. Cần phải nói thêm rằng ma trận sử dụng trong biến đổi
MixColumns AES là ma trận tối ưu hơn trong tất cả các ma trận MDS 4x4 trên
khi cài đặt theo kiểu bit-slice, tuy nhiên khi cài đặt phần cứng như phân tích ở mục
trước thì ma trận luận án đề xuất lại là ma trận tối ưu hơn.
Trên thực tế khi lựa chọn ma trận ta phải xét tất cả các tính chất có thể của nó.
Do vậy, trong phần tiếp theo luận án sẽ phân tích thêm một tính chất nữa, đó là số
lượng điểm bất động của tầng tuyến tính.
2.3.6. Đánh giá về độ an toàn, số điểm bất động của tầng tuyến tính
Như đã phân tích ở mục trước số nhánh là tham số quan trọng nhất của tầng
tuyến tính, khi xây dựng tầng tuyến tính theo kiểu AES mà sử dụng ma trận MDS
4x4 trong biến đổi MixColumns ta sẽ đảm bảo được tính chất theo chiến lược vệt
lan rộng [29]. Khái niệm số lượng điểm bất động của tầng tuyến tính đưa ra trong
[55] sẽ là một tham số quan trọng khác khi lựa chọn tầng tuyến tính, nó ảnh hưởng
đến độ an toàn và được xem như là một tham số bổ sung cho khái niệm số nhánh
của tầng tuyến tính.
74
Tầng tuyến tính trong AES gồm 2 biến đổi: ShiftRows và MixColumns. Khi
kết hợp ta có thể biểu diễn bởi phép nhân một ma trận 16x16 với một véc tơ cột như
sau:
Gọi ma trận tuyến tính 16x16 này là A. Đối với ma trận này có
và . Theo đó số lượng điểm bất động của tầng biến đổi tuyến tính
trong AES là . Thực hiện tương tự đối
với ma trận Had(1, 2, 4, 145) và hai ma trận luận án đề xuất là
C.like1(149,Cir(1,4,149)) và C.like2(2,Cir(1,106,2)) luận án nhận được:
,
,
.
Như vậy là nếu sử dụng hai ma trận này để thay thế ma trận trong biến đổi
MixColumns trong AES thì sẽ nhận được tầng tuyến tính mà chỉ có một điểm bất
75
động, đây chính là điểm véc tơ 0 tầm thường. Nghĩa là khi sử dụng ma trận đề xuất
thay thế ma trận trong biến đổi MixColumns của AES sẽ nhận được tầng tuyến tính
đảm bảo được số nhánh theo chiến lược vệt lan rộng mà không có điểm bất động
như trường hợp ma trận gốc của AES.
2.3.7. Kết quả cài đặt thực nghiệm
Nghiên cứu sinh đã thực nghiệm thiết kế các khối chức năng của biến đổi
MixColumns khi sử dụng ma trận đề xuất và một số ma trận đề xuất trước đó.
Chương trình được viết trên ngôn ngữ VHDL cho Virtex6 XC6VLX240T-2FF1156,
công cụ thiết kế là Xilinx ISE phiên bản 14.3. Kết quả thực nghiệm cài đặt tham số
phần cứng trong [Bài báo số 6] cho thấy ma trận do luận án đề xuất có tham số cài
đặt phần cứng tối ưu, tốc độ xử lý dữ liệu tương đương với ma trận trong [60].
Thực nghiệm cài đặt phần mềm cho thuật toán AES trong đó sử dụng ma trận
C.like1(149, Cir(1 ,4, 149)) để thay thế cho ma trận tuyến tính của AES (thuật toán
mã khối BC_VPN). Cách tiếp cận ở đây là xử dụng bảng tra trên môi trường với
thanh ghi 32 bit. Chương trình được viết trên ngôn ngữ C chuẩn, biên dịch sử dụng
Visual Studio v10 trên máy Intel(R) Core(TM) i5-6200U CPU 2.4GHz, Ram
4.00GB, Windows 10. Trong chương trình không sử dụng bất kỳ một lệnh
assembler hay các hỗ trợ SSE nào.
Số phép toán thực hiện và tham số an toàn khi cài đặt 1 vòng của thuật toán
cải tiến BC_VPN và của thuật toán AES (Hình 2.6)
Thuật toán Tài nguyên bộ nhớ
Bộ nhớ (bytes) Tham số an toàn Số điểm bất động Số nhánh Số lượng bảng tra Số phép XOR các số 32 bit
BC_VPN-128 AES-128 BC_VPN -192 AES-192 BC_VPN -256 AES-256 4 4 4 4 4 4 4096 4096 4096 4096 4096 4096 16 16 24 24 32 32 Số phép truy cập bộ nhớ lưu bảng tra 16 16 24 24 32 32 0 216 0 216 0 216 5 5 5 5 5 5
Bảng 2.6. Kết quả cài đặt thực nghiệm thuật toán cho 1 vòng mã hóa
76
Thực nghiệm đánh giá tốc độ được đo bằng MegaBytes/s (MB/s).
Tốc độ
Thuật toán BC_VPN
BC_VPN -128
BC_VPN -192
BC_VPN -256 Quá trình Mã hóa Giải mã Mã hóa Giải mã Mã hóa Giải mã MB/s 204 221 189 185 165 162 cpb 12 11 13 13 15 15
Bảng 2.7. Kết quả cài đặt thực nghiệm tốc độ mã hóa của BC_VPN
Đánh giá chung thuật toán mã khối BC_VPN
- Độ an toàn: Luận án đã nghiên cứu đề xuất tầng tuyến tính nhằm kháng lại
hai tấn công mạnh nhất hiện nay là thám mã vi sai và thám mã tuyến tính [29], [30],
[58]. Ma trận tuyến tính do luận án đề xuất có tính MDS như ma trận tuyến tính
trong biến đổi MixColumns của AES. Với cấu trúc thuật toán BC_VPN đã thiết kế
sẽ hoàn toàn tuân theo chiến lược vệt lan rộng mà các tác giả thiết kế chuẩn AES đã
sử dụng [29]. Với chiến lược thiết kế của BC_VPN, trong [58] đã đưa ra chứng
minh lý thuyết về số S-hộp tích cực qua 4 vòng bất kỳ của thuật toán AES (số S-hộp
tích cực thể hiện khả năng kháng thám mã vi sai và thám mã tuyến tính). Cụ thể số
S-hộp và độ phức tạp trước những thám mã này qua các vòng của thuật toán
BC_VPN được cho trong bảng 2.8, bảng 2.9 dưới đây:
Cận trên xác suất vi sai
Cỡ độ phức tạp dữ liệu trong thám mã vi sai
Vòng
Cận dưới của số lượng S-hộp hoạt động vi sai
AES
BC_VPN AES (2-6)
AES
BC_VPN
BC_VPN (2-6)
1
1
2-6
2-6
26
26
1
5
5
2-30
2-30
230
230
2
9
9
2-54
2-54
254
254
3
25
25
2-150
2-150
2150
2150
4
26
26
2-156
2-156
2156
2156
5
77
30
30
2-180
2-180
2180
2180
6
34
34
2-204
2-204
2204
2204
7
50
50
2-300
2-300
2300
2300
8
51
51
2-306
2-306
2306
2306
9
55
55
2-330
2-330
2330
2330
10
59
59
2-354
2-354
2354
2354
11
75
75
2-450
2-450
2450
2450
12 (cho khóa-192)
76
76
2-456
2-456
2456
2456
13
80
80
2-480
2-480
2480
2480
14 (cho khóa-256)
Bảng 2.8. Số lượng S-hộp tích cực vi sai và độ phức tạp trước thám mã vi sai của AES và BC_VPN
Cận trên xác suất tuyến tính
Cận dưới của số lượng S-hộp hoạt động tuyến tính
Cỡ độ phức tạp dữ liệu trong thám mã tuyến tính
Vòng
AES
BC_VPN AES (2-6)
AES
BC_VPN
BC_VPN (2-6)
1
1
2-6
2-6
26
26
1
5
5
2-30
2-30
230
230
2
9
9
2-54
2-54
254
254
3
25
25
2-150
2-150
2150
2150
4
26
26
2-156
2-156
2156
2156
5
30
30
2-180
2-180
2180
2180
6
34
34
2-204
2-204
2204
2204
7
50
50
2-300
2-300
2300
2300
8
51
51
2-306
2-306
2306
2306
9
55
55
2-330
2-330
2330
2330
10
59
59
2-354
2-354
2354
2354
11
75
75
2-450
2-450
2450
2450
12 (cho khóa-192)
78
76
76
2-456
2-456
2456
2456
13
80
80
2-480
2-480
2480
2480
14 (cho khóa-256)
Bảng 2.9. Số lượng S-hộp tích cực tuyến tính và độ phức tạp trước thám mã tuyến tính của AES và BC_VPN
Ngoài ra tầng tuyến tính luận án đề xuất không có điểm bất động như tầng
tuyến tính của AES. Khái niệm về tham số an toàn này đã được nghiên cứu chi tiết
trong luận văn [55] của tác giả Z'aba.
- Các đặc trưng cài đặt và thuật toán: kết quả cài đặt thực nghiệm thuật toán
mã khối BC_VPN trên phần cứng và phần mềm đảm bảo tính hiệu quả, mềm dẻo,
tương thích kiến trúc phần cứng và môi trường hệ điều hành Windows, linux.
- Tính hiệu quả: Trong luận án đề xuất tầng tuyến tính có các tham số cài đặt
tốt và được so sánh, phân tích chi tiết bằng lý thuyết và thực hành với tầng tuyến
tính gốc cũng như một vài công bố về thiết kế tuyến tính dựa trên ma trận
Hadamard [43]. Kết quả cài đặt thử nghiệm tốc độ mã hóa của BC_VPN sử dụng
ma trận đề xuất (bảng 2.7) là tương đương với cài đặt của AES trong [58].
KẾT LUẬN CHƯƠNG 2
Trong chương này luận án đã đưa ra một số kết quả chính như sau:
- Bảng xác định ngưỡng an toàn mật mã cho số modulo N của hệ mật RSA sử
dụng trong lĩnh vực kinh tế - xã hội (Bảng 2.2).
- Đưa ra thuật toán phân tích số modulo N của hệ mật RSA dựa vào phương
pháp mã hóa liên tiếp (Thuật toán 2), từ đó đề xuất tiêu chuẩn mới đối với số
mũ công khai e. Kết quả nghiên cứu được trình bày trong [Bài báo số 05]
- Luận án đề xuất hai ma trận tuyến tính có tính chất mật mã tốt có thể thay thế
ma trận trong biến đổi MixColumns trong AES. Về mặt an toàn, ma trận này
là một ma trận MDS tựa vòng trên trường hữu hạn, khi sử dụng để thay thế ma
trận trong biến đổi MixColumns của AES sẽ nhận được tầng tuyến tính đảm
bảo được số nhánh theo chiến lược vệt lan rộng mà không có điểm bất động.
Theo quan điểm cài đặt phần cứng ma trận do luận án đề xuất không những
79
yêu cầu tài nguyên ít hơn mà còn có tốc độ xử lý dữ liệu cao hơn cả ma trận
gốc trong AES và ma trận trong [43], [58]. Kết quả nghiên cứu được trình bày
trong [Bài báo số 06].
80
CHƯƠNG III: TÍCH HỢP MẬT MÃ TRONG GIAO THỨC VÀ BỘ PHẦN MỀM BẢO MẬT DỮ LIỆU TRÊN ĐƯỜNG TRUYỀN
Trên cơ sở nghiên cứu, khảo sát, lựa chọn giải pháp tích hợp mật mã vào bộ
giao thức SSL/TLS để bảo mật thông tin trên đường truyền với những điểm can
thiệp mật mã chính tại quá trình thỏa thuận, trao đổi khóa sử dụng hệ mật khóa công
khai RSA và mã hóa dữ liệu với thuật toán mã khối ở chế độ phù hợp. Trong
chương 3 luận án tập trung thiết kế và xây dựng bộ chương trình thử nghiệm giải
pháp bảo mật dữ liệu trên đường truyền với thuật toán và tham số mật mã được
nghiên cứu đề xuất. Tiến hành cài đặt thử nghiệm bộ chương trình trên hệ thống
mạng để đánh giá độ an toàn, bảo mật và hiệu quả thực thi thuật toán mã khối mới
tích hợp trong bộ chương trình bảo mật dữ liệu trên đường truyền PMBM_VPN.
3.1. BỘ PHẦN MỀM OPENVPN
3.1.1. Giới thiệu bộ phần mềm OpenVPN
Phần mềm OpenVPN [68] được cung cấp để sử dụng cho việc thiết lập các
mạng riêng ảo trên cơ sở xây dựng các đường hầm để bảo mật các gói tin IP.
Việc thiết lập kênh truyền và truyền dữ liệu sẽ được thực hiện dựa trên nền
tảng giao thức truyền dữ liệu bảo mật chuẩn SSL/TLS (Secure Socket Layer/
Transport Layer Secure) [3], [13]. Giao thức này đảm bảo việc xác thực kết nối
người dùng trên từng phiên làm việc, các cơ chế trao đổi khóa, mã hóa và xác thực
gói dữ liệu.
Ngoài ra, việc tích hợp cơ chế nén gói dữ liệu theo thời gian thực LZO sẽ làm
giảm kích thước gói dữ liệu truyền mang lại hiệu quả băng thông mạng, làm giảm
thời gian, tài nguyên hệ thống được sử dụng trong quá trình mã hóa từ đó giảm
thiểu độ trễ của quá trình truyền tin trong các ứng dụng yêu cầu thời gian thực.
Bên cạnh đó, các cơ chế xác thực người dùng, mã hóa gói dữ liệu dựa trên nền
tảng công cụ OpenSSL [69] được định hướng tích hợp các thuật toán mật mã, các
tham số an toàn như số nguyên tố dùng cho Diffie - Hellman, tham số RSA, chứng
81
chỉ số riêng, đảm bảo gói dữ liệu được an toàn, bảo mật trên kênh truyền, tránh thất
thoát dữ liệu truyền.
Với OpenVPN, việc tích hợp đa dịch vụ: truy cập web, gửi nhận thư điện tử,
trao đổi tập tin, hội nghị truyền hình trên cùng một kênh truyền trên mạng Internet
được thực hiện một cách tiện dụng, mà vẫn đảm bảo quá trình truyền, thời gian trễ
gói tin là nhỏ và an toàn bảo mật hệ thống.
3.1.2. Sơ đồ tổng quát
Hình 3.1: Sơ đồ khối tổng quát của OpenVPN
Mô tả sơ đồ tổng quát
Sơ đồ kiến trúc hệ thống phần mềm OpenVPN được mô tả trên hình 3.1 cho ta
thấy bộ phần mềm OpenVPN là sự bổ sung, chỉnh sửa của chồng giao thức mạng
TCP/IP với 2 thành phần VPN Daemon và giao diện mạng ảo - VNI (Virtual
Networking Interface).
82
- Thành phần VPN Daemon là một tiến trình ứng dụng chạy ở User-space
hoặc Kernel-Space được chia thành 2 thành phần chính: Data Plane và Control
Plane.
+ Data Plane sẽ điều khiển tiến trình xử lý dữ liệu: nén, mã hóa, sinh khóa xác
thực trong chuỗi xác thực bảo mật kênh truyền dữ liệu, đồng thời thành phần này
còn đảm bảo việc ánh xạ địa chỉ IP của OpenVPN (địa chỉ của giao diện mạng ảo)
với địa chỉ của mạng nội bộ bên trong.
+ Control Plane tạo và quản lý kết nối giữa các máy với nhau, đảm bảo cho
kênh truyền làm việc giữa các máy luôn được duy trì.
Thành phần Control Plane hoạt động tương tác với các gói tin TCP trong khi
thành phần Data Plane thì tương tác với gói tin UDP.
- Thành phần giao diện mạng ảo - VNI: được tạo ra trong quá trình khởi tạo
OpenVPN, đảm nhận vai trò chuyển gói dữ liệu từ card mạng thật trong IP Routing
Daemon sang VPN Daemon đáp ứng cho các xử lý bên trên thông qua các tác vụ
điều khiển trên giao diện mạng ảo này.
Trên sơ đồ tổng quát của OpenVPN:
- Các thành phần từ 1 6 là các thành phần do hệ điều hành hỗ trợ.
- Các thành phần từ A F là các thành phần chính của OpenVPN.
- Các dòng dữ liệu I, II mô tả các dòng dữ liệu đi từ mạng bên trong ra bên
ngoài và dòng dữ liệu điều khiển, quản lý kết nối giữa các máy trong hệ thống.
3.1.3. Sơ đồ dòng dữ liệu
Sơ đồ dòng dữ liệu trong phần mềm được mô tả trong hình 3.2:
Tất cả gói dữ liệu IP được gửi đến card mạng Ethenet 1 của hệ thống bảo mật
máy tính trước khi gửi ra ngoài. Tại đây, gói dữ liệu sẽ được module IP Routing
Daemon tiếp nhận xử lý. IP Routing Daemon thực hiện việc kiểm tra tính hợp lệ của
gói dữ liệu dựa trên địa chỉ nguồn, địa chỉ đích, cổng giao thức và giao thức sử
dụng. Từ đó module này sẽ quyết định địa chỉ đích sẽ được chuyển đến và chuyển
tiếp gói tin đến giao diện mạng ảo (Virtual Network Interface - VNI).
83
Hình 3.2: Sơ đồ dòng dữ liệu được tương tác xử lý trong OpenVPN
Giao diện mạng ảo TUN/TAP này được khởi tạo thông qua quá trình khởi tạo
kết nối trong OpenVPN. Gói dữ liệu được chuyển từ card mạng Ethernet 1 lên giao
diện mạng ảo TUN được thực hiện thông qua việc chuyển dữ liệu từ inode của card
mạng Ethernet 1 tới inode của giao diện mạng ảo (tun0) do OpenVPN tạo ra. Driver
quản lý giao diện mạng ảo cung cấp các hàm chức năng hỗ trợ cho việc trao đổi dữ
liệu giữa card mạng với hệ thống OpenVPN.
Dữ liệu gói tin được giao diện mạng ảo chuyển đến VPN Daemon. Tại đây gói
dữ liệu sẽ được bóc tách IP header và dữ liệu (datagram) thành các phần riêng biệt.
Phần dữ liệu (datagram) sẽ được chuyển tiếp đến module xử lý nén dữ liệu theo thời
gian thực LZO nhằm giảm kích thước và tăng hiệu suất truyền, cũng như hiệu suất
mã hóa. Dữ liệu sau khi thực hiện nén xong sẽ được chuyển tiếp đến module mã
hóa (Encryption) để thực hiện việc mã hóa theo thuật toán đã được thiết lập trong
tệp cấu hình.
Sau khi mã hóa, dữ liệu được chuyển qua module xác thực (Authencation).
Module này sẽ thêm vào các thông tin về người dùng, cổng giao tiếp, địa chỉ nguồn,
84
địa chỉ đích vào gói dữ liệu nhằm đảm bảo tính hợp lệ khi được xác thực ở bên
nhận.
Toàn bộ dữ liệu này sẽ được đóng gói theo chuẩn gói tin UDP, kết hợp với
thành phần UDP Header chứa đầy đủ các thông tin điều khiển hỗ trợ cho quá trình
bóc tách dữ liệu ngược lại ở máy đích, cũng như các thông số cho quá trình truyền
dữ liệu.
Gói tin UDP sẽ được chuyển về card mạng Ethernet0. Từ đó, card mạng
Ethernet0 sẽ quản lý gói tin UDP này và chuyển tiếp ra mạng ngoài thông qua kênh
truyền bảo mật SSL/TLS đã được thiết lập trước đó.
Trong quá trình xử lý gói dữ liệu, việc tích hợp cơ chế xử lý đa luồng trong
quá trình thiết lập kênh truyền SSL/TLS sẽ tận dụng các khoảng thời gian rảnh của
CPU, đảm bảo cho việc tạo và trao đổi khóa được thực hiện liên tục nhanh chóng
đảm bảo cho kênh truyền luôn được thông suốt. Đồng thời cơ chế xử lý đa luồng
này còn giúp cho việc nén, mã hóa và xác thực gói dữ liệu được thực hiện nhanh
chóng thông qua việc chia nhỏ các xử lý thành nhiều luồng trên bộ nhớ chia sẻ dùng
chung, đảm bảo cho các phiên làm việc được thực hiện một cách liên tục.
3.2. MỘT SỐ MODULE CHÍNH TRONG BỘ PHẦN MỀM
3.2.1. Module VPN Daemon - Vận hành VPN theo cơ chế dịch vụ hệ
thống
VPN Daemon là thành phần chính của OpenVPN quản lý các chức năng chủ
yếu của hệ thống:
- Quản lý quá trình khởi tạo OpenVPN và mở Daemon cho OpenVPN.
- Điều khiển quá trình xử lý dữ liệu của hệ thống OpenVPN.
- Điều khiển và quản lý kết nối đến OpenVPN.
VPN Daemon được chia làm 2 thành phần chính: Data Plane và Control Plane.
- Data Plane điều khiển và quản lý quá trình xử lý dữ liệu trong OpenVPN,
- Control Plane điều khiển và quản lý kết nối cũng như quá trình trao đổi dữ liệu
giữa các đầu cuối vận hành phần mềm OpenVPN ở các chế độ hoạt động khác
nhau (server/client).
85
Sơ đồ khối của VPN Daemon
Sơ đồ khối của VPN Daemon (Hình 3.3) bao gồm 2 thành phần chính: Data
Plane và Control Plane.
Hình 3.3: Sơ đồ khối của VPN Daemon
- Thành phần điều khiển dữ liệu Data Plane bao gồm các module xử lý dữ liệu
chính của OpenVPN (nén, mã hóa, xác thực số, chuyển đổi gói dữ liệu từ TCP sang
UDP).
- Thành phần Control Plane tạo và điều khiển quá trình trao đổi dữ liệu giữa
các đầu cuối vận hành OpenVPN với nhau.
86
Hoạt động của VPN Daemon
- Ngay lần khởi tạo đầu tiên, OpenVPN sẽ nạp các thư viện cần thiết cho các
module xử lý dữ liệu trong phần mềm (thư viện nén LZO, thư viện mã hóa
OpenSSL).
- Sau đó, phần mềm tiếp tục khởi tạo các thông số cần thiết trong suốt quá
trình trao đổi dữ liệu về sau của OpenVPN (ví dụ: MTU - Maximum Transfer Unit:
Kích thước gói truyền tối đa trên kênh truyền, TLS, …).
- Sau khi khởi tạo các thư viện đã thành công, OpenVPN tiếp tục khởi tạo các
thông số theo cấu hình định trước cho giao diện mạng ảo TUN/TAP để điều khiển
quá trình giao tiếp trao đổi dữ liệu của OpenVPN.
- Đối với client, quá trình khởi tạo TUN/TAP chỉ được tiến hành sau khi kênh
truyền đã được thiết lập và xác thực, các thư viện đã được kích hoạt và khởi tạo
thành công.
- Sau khi khởi tạo thành công, OpenVPN sẽ thực hiện mở cơ chế Daemon vận
hành cho OpenVPN để đáp ứng việc xử lý dữ liệu trong hệ thống.
- Các timer sẽ được khởi tạo để điều khiển và xử lý các thông tin xuất/nhập
của hệ thống.
3.2.2. Module TUN/TAP - quản lý giao diện mạng ảo
Module TUN/TAP hỗ trợ cho việc trao đổi gói dữ liệu giữa card mạng
Ethernet (Kernel space) với chương trình ứng dụng của người dùng (User space).
Trong quá trình khởi tạo OpenVPN, giao diện mạng ảo sẽ được tạo ra dựa trên
sự hỗ trợ của nhân hệ điều hành - /dev/net/tun0, kết hợp với các thông số do
OpenVPN truyền xuống.
Module này cung cấp các hàm chức năng hỗ trợ giao tiếp, trao đổi các gói dữ
liệu giữa card mạng vật lý với chương trình người dùng ở trong không gian người
dùng. Điều này có nghĩa là: việc trao đổi dữ liệu giữa chương trình ứng dụng và
card mạng thật sẽ thông qua giao diện mạng ảo (VNI). Module này cung cấp các
hàm có chức năng tương tác với card mạng vật lý.
87
Tuỳ thuộc vào yêu cầu sử dụng, ta có thể cấu hình lựa chọn loại giao diện
mạng ảo sử dụng là TUN hay TAP. Giao diện mạng ảo TUN được dùng để trao đổi
các gói dữ liệu IP, TAP được dùng để trao đổi các Ethernet frame.
Trong OpenVPN, việc tạo ra giao diện mạng ảo TUN/TAP với địa chỉ IP và
mặt nạ mạng con hoàn toàn bảo mật mà người bên ngoài hệ thống không thể truy
cập được những thông tin này, giúp cho hệ thống được đảm bảo an toàn.
Sơ đồ khối hoạt động của module TUN/TAP
Hình 3.4: Sơ đồ khối hoạt động của module TUN/TAP
Hình 3.4 trình bày sơ đồ khối mô tả kết nối đơn điểm point-to-point giữa card
mạng Ethernet với giao diện mạng ảo TUN/TAP trong quá trình khởi tạo của
OpenVPN.
Dữ liệu vào ra card mạng vật lý eth0 được module card mạng của kernel điều
khiển thông qua bộ điều khiển IO Block. Module tun.o của nhân hệ thống kết hợp
với module tun.o của OpenVPN sẽ thiết lập giao diện mạng ảo TUN/TAP nhằm
đảm bảo việc trao đổi dữ liệu giữa card mạng vật lý eth0 với chương trình ứng dụng
người dùng.
88
Trong cấu trúc mã nguồn của phần mềm OpenVPN, tập tin tun.c (kèm theo tập
tin tun.h) được sử dụng cho mục đích cấu hình, truyền các thông số cho module
tun.o (của nhân hệ thống) nhằm khởi tạo một VNI - giao diện mạng ảo dựa trên sự
hỗ trợ của nhân hệ điều hành cung cấp. Ngoài ra, nó còn chứa đựng các hàm hỗ trợ
cho việc đọc và gửi các gói IP nhằm phục vụ cho việc nhận và gửi các gói IP cho
VPN Daemon.
VNI sau khi khởi tạo thành công sẽ có liên kết logic Point-to-Point với một
card mạng thật. Dữ liệu từ card mạng thật sẽ được đưa qua VNI này và kết quả là ta
có thể đọc dữ liệu từ inode kết nối với VNI đã cấu hình.
3.2.3. Trao đổi khoá trong OpenVPN
Việc trao đổi khoá trong OpenVPN có thể được thực hiện trong hai chế độ sau
đây:
Chế độ khóa tĩnh (Static Key): trong chế độ này, một khóa tĩnh được tạo và
chia sẻ trước cho cả hai bên (qua một kênh an toàn nào đó, chẳng hạn ta có thể
copy bằng lệnh scp của công cụ SSH) trước khi tunnel được khởi động. Khóa
tĩnh này chứa 4 khóa độc lập khác nhau: là khóa HMAC gửi, HMAC nhận, mã
hóa và giải mã. Tuy nhiên trong chế độ khóa tĩnh, ngầm định cả hai bên chỉ sử
dụng chung một khóa HMAC và chung một khóa để mã hóa/giải mã. Ta có
thể sử dụng tham số --secret để có thể sử dụng cả 4 khóa độc lập.
Chế độ sử dụng giao thức SSL/TLS: một phiên SSL được thiết lập bởi việc
xác thực song phương (cụ thể là mỗi bên kết nối đều phải cung cấp chứng chỉ
của mình). Nếu quá trình bắt tay và xác thực SSL/TLS thành công, các khóa
dùng để mã hóa/giải mã và HMAC cho dữ liệu trên kênh truyền VPN mới sẽ
được tạo một cách ngẫu nhiên bởi hàm tạo ngẫu nhiên của OpenSSL và được
trao đổi với nhau thông qua kênh kết nối an toàn SSL/TLS. Cả hai bên kết nối
đều cung cấp nguồn ngẫu nhiên để tạo ra khóa bí mật. Chế độ này không sử
dụng khóa chung cho mã hoá và giải mã, mà mỗi bên đều có các khóa HMAC
gửi, HMAC nhận, khóa mã hóa và khóa giải mã gói tin khác nhau. Nếu sử
dụng tùy chọn --key-method 2, các khóa thực được tạo ra từ các nguồn ngẫu
89
nhiên mà 2 bên cung cấp bởi hàm TLS PRF. Nếu ta sử dụng tùy chọn –key-
method 1, các khóa được tạo ra trực tiếp từ hàm RAND_bytes của OpenSSL.
Trong OpenVPN –key-method 2 được dùng làm tùy chọn ngầm định. Việc
xác thực sử dụng giao thức TLS được thực hiện dựa trên việc thiết lập một hệ
thống hạ tầng khóa công khai (PKI). Hệ thống PKI bao gồm chứng chỉ của CA
và khóa được dùng để ký cho các chứng chỉ của client và server. Mỗi client
hoặc server đều có các file chứng chỉ và khóa bí mật riêng. OpenVPN hỗ trợ
việc xác thực song công dựa trên các chứng chỉ số, nghĩa là client phải xác
thực chứng chỉ của server và ngược lại trước khi thiết lập kết nối. Cả hai bên
xác thực lẫn nhau trước tiên bằng việc kiểm tra xem chứng chỉ của bên kia có
phải được ký bởi CA không, sau đó kiểm tra các thông tin của chứng chỉ như
tên (common name) hoặc kiểu chứng chỉ (server hay client).
3.2.4. Mã hoá trong OpenVPN
OpenVPN có thể được cấu hình để hoạt động ở hai chế độ:
Chế độ mã: Dữ liệu trên đường truyền được mã hoá bằng việc sử dụng các mã
pháp có trong bộ thư viện OpenSSL. Mã pháp mặc định được sử dụng là
Blowfish ở chế độ CBC (cipher BF-CBC).
Chế độ rõ: Mọi dữ liệu đi qua đường hầm đều ở dạng rõ. Chế độ này hoạt
động khi trong file cấu hình chúng ta chỉ ra tuỳ chọn “cipher none”.
3.2.5. Xác thực tính toàn vẹn gói dữ liệu trong OpenVPN
OpenVPN có thể được cấu hình để hoạt động ở hai chế độ:
Chế độ xác thực: Sử dụng HMAC với các thuật toán hashing trong bộ thư
viện OpenSSL như MD4, MD5, SHA, thuật toán hashing mặc định là SHA1.
Chế độ không xác thực: Gói dữ liệu sẽ không được gán thêm thành phần xác
thực để bên nhận kiểm tra tính xác thực và tính toàn vẹn khi nhận được dữ
liệu. Chế độ này hoạt động khi trong file cấu hình chúng ta chỉ ra tuỳ chọn
“auth none”.
90
3.2.6. Giao thức trong OpenVPN
OpenVPN sử dụng hai giao thức cơ bản để tạo đường hầm đó là giao thức
TCP và UDP. Quá trình mã hoá, giải mã và xác thực được mô tả như hình 3.5 và
hình 3.6.
Hình 3.5: Lưu đồ mã hoá và xác thực của OpenVPN
Hình 3.6: Lưu đồ giải mã và xác thực trong OpenVPN
Về bản chất OpenVPN không phải là một giao thức, tuy nhiên trong quá trình
trao đổi gói dữ liệu của mình, OpenVPN cũng đưa ra định dạng gói dữ liệu theo một
cách riêng. Mỗi gói tin TCP/UDP của OpenVPN bao gồm 3 phần chính như sau:
Độ dài gói/length (16 bit, không dấu) - chỉ với giao thức TCP, luôn gửi ở
dạng rõ.
Opcode của gói/key_id (8 bit) - chỉ được dùng với giao thức TLS, không
được dùng trong chế độ chia sẻ khóa bí mật. Bao gồm:
o Kiểu gói tin/message_type (5 bit cao) - Được xác định ở phần dưới
đây.
o key_id (3 bit thấp) - key_id trỏ tới một phiên TLS đã được trao đổi.
OpenVPN trao đổi phiên TLS bằng việc sử dụng key_id mới cho mỗi
91
phiên mới. OpenVPN sử dụng 2 dạng key_id khác nhau. Dạng đầu
tiên là 64 bit và được dùng cho các message P_CONTROL. Các
message P_DATA sử dụng các dạng key_id ngắn hơn (3 bit) vì lý do
tính hiệu quả, vì phần lớn các gói của OpenVPN trong một tunnel tích
cực sẽ là các message P_DATA. Dạng 64 bit xem như một session_id,
trong khi dạng 3 bit xem như một key_id.
Dữ liệu/Payload (n byte) - có thể là message P_CONTROL, P_ACK, hoặc
P_DATA.
Hình 3.7: UDP/TCP Format
Trong đó, Kiểu gói tin có thể là:
P_CONTROL_HARD_RESET_CLIENT_V1 - Phương pháp sinh khóa 1,
khởi tạo khóa từ client, bỏ qua trạng thái trước đó.
P_CONTROL_HARD_RESET_SERVER_V1 - Phương pháp sinh khóa 1,
khởi tạo khóa từ server, bỏ qua trạng thái trước đó.
P_CONTROL_HARD_RESET_CLIENT_V2 - Phương pháp tạo khóa 2,
khởi tạo khóa từ client, bỏ qua trạng thái trước. Đây là phương pháp mặc
định trong OpenVPN.
P_CONTROL_HARD_RESET_SERVER_V2 - Phương pháp tạo khóa 2,
khởi tạo khóa từ server, bỏ qua trạng thái trước đó.
P_CONTROL_SOFT_RESET_V1 - Tạo khóa mới
P_CONTROL_V1 - Gói tin của kênh điều khiển (thường là bản mã của
TLS).
P_ACK_V1 - Xác nhận đã nhận gói P_CONTROL.
P_DATA_V1 - Gói dữ liệu đã được mã hoá của tunnel
92
3.3. TÍCH HỢP THAM SỐ RSA AN TOÀN VÀ THUẬT TOÁN MÃ KHỐI BC_VPN TRONG GIAO THỨC SSL/TLS.
Dựa trên mô hình cấu trúc và ý tưởng thiết kế của bộ phần mềm mã nguồn mở
OpenVPN sử dụng bộ thư viện mật mã OpenSSL. Trên cơ sở bộ thư viện, chương
trình mã nguồn mở (phiên bản OpenVPN-2.3.6, phiên bản OpenSSL-1.0.2a),
nghiên cứu sinh đã thực hiện giải pháp tích hợp tham số RSA và thuật toán mã khối
vào bộ thư viện mật mã trong OpenVPN theo mô hình sau:
Hình 3.8: Tích hợp tham số RSA và thuật toán mã khối trong OpenVPN
Thực hiện sinh bộ tham số RSA an toàn trong lĩnh vực kinh tế - xã hội bằng
chương trình sinh tham số RSA (chương trình GenRSA.exe) và chuyển đổi bộ tham
số theo định dạng chứng chỉ số (theo chuẩn PKCS). Tích hợp bộ tham số RSA an
toàn và tham số Diffie - Hellman (DH) vào hệ thống để thực hiện quá trình xác thực
và trao đổi khóa trong giai đoạn thỏa thuận, thiết lập kênh truyền thông có bảo mật.
Thực hiện tích hợp thuật toán mã khối BC_VPN được nghiên cứu đề xuất (với
các thông số: độ dài khối rõ và khối mã là 128 bit, độ dài khoá là 256 bít) vào bộ
93
phần mềm. Thuật toán mã khối BC-VPN được sử dụng để mã hóa chữ ký trong giai
đoạn thỏa thuận khóa của các bên tham gia truyền thông và thực hiện bảo mật dữ
liệu trên kênh riêng ảo sau khi được thiết lập.
Cấu hình và cài đặt bộ phần mềm bảo mật dữ liệu trên đường truyền
PMBM_VPN với các thành phần chính như sau:
- Giao thức: Loại bỏ những phần mã nguồn không sử dụng, những file và tài
liệu không cần thiết. Loại bỏ giao thức SSLv2 được tích hợp sẵn trong
OpenSSL vì giao thức SSLv2 đã được phân tích là kém an toàn, còn tồn tại
điểm yếu an ninh (chương 1). Việc thiết lập phiên bản của giao thức SSL/TLS
được thực hiện thông qua file cấu hình hệ thống và file options.c.
- Các thuật toán mã hoá: Loại bỏ các thuật toán mã hóa yếu, chỉ để lại thuật toán
mã khối AES và tích hợp thêm thuật toán mã khối BC_VPN do luận án nghiên
cứu đề xuất.
- Các thuật toán hashing: Chỉ để lại MD5, SHA1 và thêm SHA-256.
- Các thuật toán trao đổi khoá: Để lại thuật toán trao đổi khoá RSA và Diffie -
Hellman với tham số riêng an toàn.
- Thuật toán ký và kiểm tra chữ ký: Sử dụng lược đồ chữ ký số RSA với thuật
toán sinh tham số RSA an toàn do luận án đề xuất.
Sau khi tiến hành các xử lý và tích hợp các thành phần mật mã như trên, bộ
thư viện OpenSSL được biên dịch lại và tích hợp trong bộ phần mềm PMBM_VPN.
3.3.1. Sử dụng tham số RSA an toàn trong giao thức SSL/TLS
Trong giao thức SSL/TLS hệ mật RSA tham gia vào quá trình xác thực lẫn
nhau và việc thiết lập khóa chung giữa ứng dụng khách và ứng dụng chủ. Việc xác
thực lẫn nhau giữa ứng dụng khách và ứng dụng chủ được thực hiện thông qua các
chứng chỉ số. Việc thỏa thuận khóa chung giữa hai ứng dụng có thể được mô tả như
sau:
Kết thúc giai đoạn thứ nhất của giao thức bắt tay SSL, ứng dụng chủ có được
giá trị ngẫu nhiên ClientHello.random, gồm 28 byte được sinh bởi ứng dụng khách;
94
ứng dụng khách có được giá trị ngẫu nhiên ServerHello.random (gồm 28 byte được
sinh bởi ứng dụng chủ) và chứng chỉ số của ứng dụng chủ.
Trong giai đoạn thứ hai của giao thức bắt tay SSL, ứng dụng khách sinh một
giá trị ngẫu nhiên thứ hai gồm 48 byte được gọi là pre_master_secret, sử dụng khóa
công khai RSA của ứng dụng chủ (được lấy từ chứng chỉ số của ứng dụng chủ) để
mã hóa giá trị ngẫu nhiên này và gửi cho ứng dụng chủ. Khi ứng dụng chủ nhận
được bản mã giá trị ngẫu nhiên pre_master_secret, ứng dụng chủ sử dụng tham số
khóa bí mật RSA để giải mã và nhận được pre_master_secret.
Kết thúc giai đoạn thứ hai của giao thức bắt tay SSL, ứng dụng chủ và ứng
dụng khách có thể tính khóa chung sử dụng cho phiên liên lạc từ các giá trị
ClientHello.random, ServerHello.random và pre_master_secret. Trong giao thức
SSL, phương pháp tính khóa chung được thực hiện thông qua các hàm băm mật mã
MD5 và SHA:
Từ 48 byte pre_master_secret, kết hợp với 28 byte ngẫu nhiên client_random
(của SSL Client), 28 byte ngẫu nhiên server_random (của SSL Server), giao thức
tạo ra 48 byte khác gọi là master_secret như sau:
master_secret =
MD5(pre_master_secret + SHA('A' + pre_master_secret + ClientHello.random
+ ServerHello.random)) +
MD5(pre_master_secret + SHA('BB' + pre_master_secret +
ClientHello.random + ServerHello.random)) +
MD5(pre_master_secret + SHA('CCC' + pre_master_secret +
ClientHello.random + ServerHello.random)) ;
48 byte master_secret được dùng như nguồn ngẫu nhiên để tạo khoá cho các
mã pháp khác đã được thỏa thuận cho phiên liên lạc (khóa dùng cho hàm thực hiện
sinh mã xác thực thông báo dựa trên hàm băm: HMAC, khoá và véc tơ khởi tạo
(IV) dùng cho mã khối, ...). Dãy các byte ngẫu nhiên này được tạo như sau:
key_block =
95
MD5(master_secret + SHA('A' + master_secret + ClientHello.random +
ServerHello.random)) +
MD5(master_secret + SHA('BB' + master_secret + ClientHello.random +
ServerHello.random)) +
MD5(master_secret + SHA('CCC' + master_secret + ClientHello.random +
ServerHello.random)) + ..... ;
Việc gọi hàm MD5, SHA với các giá trị salt (là các ký tự ‘A’, ‘BB’, ‘CCC’,
…) tăng dần cho đến khi đủ độ dài cần thiết (tùy thuộc vào độ dài dữ liệu khóa của
các thuật toán mật mã đã được thỏa thuận giữa ứng dụng khách và ứng dụng chủ sẽ
dùng trong phiên liên lạc).
Các hàm chính thực hiện trong quá trình xác thực và trao đổi khóa.
Hàm ssl3_send_server_key_exchange
Chức năng:
Server thực hiện gửi các tham số trong quá trình thỏa thuận khóa DH
- Tên hàm: int ssl3_send_server_key_exchange(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: Gửi các thông tin trao đổi khóa sang client
Hàm ssl3_get _key_exchange (Thực hiện trong tệp s3_clnt.c)
Chức năng:
- Client nhận các tham số trao đổi DH từ server
- Tên hàm: int ssl3_get_key_exchange(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: Client nhận các tham số trao đổi DH từ server và thực hiện xử lý.
Hàm ssl3_send_client_key_exchange (Thực hiện trong tệp s3_clnt.c)
Chức năng:
- Client gửi các tham số trao đổi khóa DH đến server
- Tên hàm: int ssl3_send_client_key_exchange(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: Client gửi các tham số trao đổi DH đến server và thực hiện xử lý
96
Hàm ssl3_get_client_key_exchange (Thực hiện trong tệp s3_srvr.c)
Chức năng:
- Server thực hiện nhận các tham số trao đổi khóa từ client
- Tên hàm: int ssl3_get_client_key_exchange(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: Server thực hiện nhận các tham số trao đổi khóa từ client và tính khóa
master_key.
Hàm ssl3_send_client_verify (Thực hiện trong tệp s3_clnt.c)
Chức năng:
- Client thực hiện ký dựa trên các gói tin đã trao đổi với server
- Tên hàm: int ssl3_send_client_verify(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: Client thực hiện ký dựa trên các gói tin đã trao đổi với server
Hàm ssl3_get_cert_verify (Thực hiện trong tệp s3_srvr.c)
Chức năng:
- Server thực hiện nhận chữ ký và kiểm tra chữ ký của client
- Tên hàm: int ssl3_get_cert_verify(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL Đầu ra: Server thực hiện nhận chữ ký và kiểm tra chữ ký của client
Hàm ssl3_send_server_sign (Thực hiện trong tệp s3_srvr.c)
Chức năng:
- Server tạo chữ ký và gửi sang client
- Tên hàm: int ssl3_send_server_sign(SSL *s)
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: server tạo chữ ký và gửi sang client
Hàm ssl3_get_server_sign (Thực hiện trong tệp s3_clnt.c)
Chức năng:
- Client thực hiện nhận chữ ký và kiểm tra chữ ký của server
- Tên hàm: int ssl3_get_server_sign(SSL *s)
97
Đầu vào: SSL *s: Toàn bộ thông tin của phiên người dùng SSL
Đầu ra: Client thực hiện nhận chữ ký và kiểm tra chữ ký của server
- Các tham số RSA an toàn được chuyển đổi theo định dạng chuẩn (PKCS) dưới
dạng các file: ca.crt; user-01.crt và user-01.key.
- Tham số khoá Diffie - Hellman an toàn được nạp vào server theo định dạng
chuẩn lưu trong file dh2048.pem.
Các tham số trên được bọc theo định dạng chuẩn và tích hợp vào quá trình trao
đổi khóa, xác thực của giao thức SSL/TLS trong module SSL_OpenSSL.c.
3.3.2. Tích hợp thuật toán mã khối BC_VPN vào trong bộ giao thức
SSL/TLS.
Hệ mã khối BC_VPN được nghiên cứu đề xuất với các tham số cụ thể: độ dài
khối rõ và khối mã là 128 bit, độ dài khoá là 256 bít, cấu trúc của hệ mã khối được
thiết kế theo cấu trúc SPN.
Hàm mã hóa dữ liệu được sử dụng để mã hóa chữ ký trong giai đoạn thỏa
thuận khóa của các bên tham gia. Sau đó hàm này được sử dụng để mã hóa dữ liệu
kênh điều khiển và mã hóa dữ liệu gói tin IP. Trong cài đặt thuật toán mã khối ở chế
độ OFB, tại hai điểm client và server đều có hai cặp khóa và IV cho mỗi chiều đến,
chiều đi của gói tin IP là (Keyin, IVin) và (Keyout, IVout). Hai cặp khóa này thu được
từ hàm dẫn xuất khóa với đầu vào là master key (có được sau quá trình bắt tay thỏa
thuận khóa). Gói tin IP đến sẽ được giải mã bằng cặp khóa (Keyin, IVin) và gói tin đi
sẽ được mã hóa bằng cặp khóa (Keyout, IVout).
Quá trình thực hiện mã hóa và xác thực gói tin (Hình 3.9):
Hình 3.9: Lưu đồ mã hoá và xác thực gói tin trong PMBM_VPN
98
Bên gửi sử dụng hàm HMAC trên gói tin sau khi đã được mã hóa và tạo
ra một mã xác thực. Mã xác thực này được bên nhận sử dụng để kiểm tra tính
xác thực của gói tin. Quá trình mã hóa gói tin được thực hiện trong hàm
bmvpn_encrypt, trong tệp crypto.c
Quá trình thực hiện xác thực và giải mã gói tin (Hình 3.10):
Hình 3.10: Lưu đồ giải mã và xác thực gói tin trong PMBM_VPN
Bên nhận, sử dụng hàm HMAC để kiểm tra tính toàn vẹn và xác thực
của gói tin. Nếu thỏa mãn thì bên nhận sẽ giải mã gói tin này. Quá trình giải mã gói
tin được thực hiện trong hàm bmvpn_decrypt, trong tệp crypto.c.
Chi tiết quá trình đóng gói và bảo vệ gói tin IP trong PMBM_VPN được thực
hiện theo hình 3.11 dưới đây:
Hình 3.11: Đóng gói và bảo vệ gói tin IP trong PMBM_VPN
99
Quá trình tích hợp hệ mã khối được thực hiện theo nguyên tắc: nhúng mã khối
vào thư viện OpenSSL thông qua giao diện EVP, sau đó phần mềm PMBM_VPN sẽ
thực hiện gọi thuật toán mã khối từ thư viện này để tiến hành mã hoá và giải mã các
gói dữ liệu.
Thuật toán mã khối BC_VPN được xây dựng và tích hợp trong thư viện
OpenSSL thông qua các hàm định nghĩa (bcvpn.h) và module (bcvpn.c và crypto.c)
thực hiện mã hóa, giải mã với các chế độ mã khối khác nhau.
3.3.3. Thử nghiệm, đánh giá bộ phần mềm bảo mật đường truyền
PMBM_VPN.
Mô hình thử nghiệm
Hình 3.12 dưới đây là mô hình thử nghiệm với cấu hình VPN dạng
MultiClients-to-Server. Mô hình này phù hợp cho hệ thống có nhiều người dùng di
động có thể truy cập mọi lúc, mọi nơi qua hệ thống mạng LAN/WAN tới hệ thống
server của tổ chức/công ty. Cách thức tổ chức hệ thống bảo mật VPN như sau:
Hình 3.12: Mô hình thử nghiệm phần mềm PMBM_VPN
100
- Trên các máy trạm của người dùng và các máy server được cài phần mềm
PMBM_VPN.
- Đối với hệ thống tại Trung tâm cần có các thiết bị bảo vệ như
FW/IDS/IPS/AntiVirus … để bảo vệ an ninh an toàn. Ở đây demo là 2 thiết bị
FW 1U đảm bảo cả dự phòng và phân tải.
- Đối với các máy chủ bảo mật, sử dụng ít nhất 2 server để làm nhiệm vụ phân
tải và bảo mật. Trong hình dưới đây là 03 server, mỗi server sẽ được cài phần
mềm PMBM_VPN cấu hình ở chế độ server để cho phép các máy trạm kết nối
nhằm thiết lập đường hầm bảo mật VPN cho phép truy cập an toàn từ các máy
trạm vào các máy chủ Web, database, FTP, …
- Trên các máy trạm, cấu hình phần mềm PMBM_VPN dưới dạng client để kết
nối đến các server nhằm thiết lập đường hầm bảo mật dữ liệu. Phía client có
thể cấu hình để cho phép kết nối đến nhiều VPN server tại cùng một thời
điểm, hoặc có thể lựa chọn bất kỳ một server nào trong trường hợp phân tải và
tránh lỗi.
- Việc thiết lập phiên bản của giao thức SSL/TLS và thuật toán mã hóa sử dụng
trong bộ phần mềm PMBM_VPN được thực hiện thông qua file cấu hình hệ
thống trên Server (server.ovpn) và trên Client (client.ovpn).
Cấu hình máy chủ cài đặt PMBM_VPN Server:
- Intel® Core™ i3-4160 CPU @ 3.60GHz 3.59GHz
- Hệ điều hành: Micrsoft Windows Server 2012, 64 bit
- RAM 8G
Cấu hình máy trạm cài đặt PMBM_VPN Client:
- Intel® Core™ i7-4710HQ CPU @ 2.50GHz 2.50GHz
- Hệ điều hành: Micrsoft Windows 8, 64 bit
- RAM 8G
Luận án sử dụng công cụ Jperf 2.2 để đánh giá tốc độ của bộ phần mềm
PMBM_VPN.
101
Dưới đây là một số kết quả thu được:
Cấu hình trên máy VPN Server sử dụng mã khối BCVPN-256-OFB
Hình 3.13: Cấu hình cho VPN Server
Cấu hình trên máy VPN Client sử dụng mã khối BCVPN-256-OFB
Hình 3.14: Cấu hình cho VPN Client
102
Trạng thái kết nối trao đổi dữ liệu trên mạng
Hình 3.15: Trạng thái hiện thời của hệ thống VPN đã kết nối thành công
Hình 3.15 mô tả trạng thái hiện thời của hệ thống VPN đã kết nối thành công.
Khi đó giữa client và server thiết lập một kênh truyền tin có bảo mật, việc thiết lập
và thỏa thuận các thuật toán trao đổi tham số, trao đổi khóa, xác thực server và
client, ...được thực hiện thông qua thủ tục bắt tay của giao thức SSL/TLS. Phần
mềm PMBM_VPN đã thực hiện thành công việc kết nối, thiết lập kênh truyền có
bảo mật giữa client và server với các module mật mã được tích hợp vào hệ thống:
- Trao đổi và thỏa thuận khóa: Sử dụng giao thức trao đổi khóa Diffie - Hellman
với tham số Diffie - Hellman riêng an toàn (file dh2048.pem).
- Lược đồ chữ ký số: Sử dụng lược đồ chữ ký số RSA với tham số RSA an toàn
do luận án đề xuất và được cài đặt, tích hợp vào hệ thống.
- Thuật toán mã hoá: Thiết lập thuật toán mã khối BC_VPN với chế độ mã OFB
do luận án xây dựng và tích hợp vào hệ thống.
Bên cạnh đó cơ chế xác thực người dùng, xác thực gói tin, sử dụng chứng chỉ
số được tích hợp vào hệ thống đảm bảo cho quá trình truyền dữ liệu trên mạng được
an toàn và bảo mật.
103
Một số kết quả thử nghiệm
Hình 3.16: Tốc độ của phần mềm PMBM_VPN (1 luồng)
Hình 3.17: Tốc độ của phần mềm PMBM_VPN (4 luồng)
104
Thực hiện cấu hình lại bộ phần mềm trên máy VPNSever và trên máy
VPNClient với mã pháp AES-256-OFB; Tiến hành thử nghiệm đo tốc độ của phần
mềm PMBM_VPN trên 1 luồng và 4 luồng (kết quả cài đặt và đo tốc độ luồng dữ
liệu được trình bày trong phụ lục luận án).
Bảng 3.1 so sánh, đánh giá tốc độ thực hiện trực tiếp từ PMBM_VPN Client
đến PMBM_VPN Server sử dụng thuật toán BC_VPN, độ dài khóa 256 bit, chế độ
mã OFB với thuật toán mã khối chuẩn AES-256-OFB
Tốc độ đạt được Số luồng
1 4 Sử dụng thuật toán BC_VPN-256-OFB (Mbit/giây) 495.22 484 Sử dụng thuật toán AES-256-OFB (Mbit/giây) 487.50 482
Bảng 3.1: So sánh tốc độ từ PMBM_VPN client đến PMBM_VPN server
Trên cơ sở kết quả cài đặt, thử nghiệm bộ phần mềm bảo mật dữ liệu trên
đường truyền PMBM_VPN trên hệ thống mạng phòng thí nghiệm, nghiên cứu sinh
rút ra một số nhận xét sau:
- Giải pháp tích hợp tham số mật mã RSA và thuật toán mã khối BC_VPN nâng
cao tính an toàn cho giao thức SSL/TLS trong xây dựng phần mềm bảo mật dữ
liệu trên đường truyền là đúng đắn, có tính khả thi cao.
- Khẳng định thuật toán mã khối BC_VPN tích hợp trong bộ phần mềm bảo mật
dữ liệu trên đường truyền thực thi đúng đắn và hiệu quả (tốc độ thực thi tương
đương với thuật toán mã khối AES chuẩn).
KẾT LUẬN CHƯƠNG III
Trong chương 3 luận án đã đạt được những kết quả sau:
- Nghiên cứu, phân tích mô hình, cấu trúc hoạt động của bộ phần mềm
OpenVPN. Kiểm soát và từng bước làm chủ bộ phần mềm mã nguồn mở. Xác
105
định giải pháp, điểm can thiệp tích hợp mật mã vào các thành phần trong bộ
phần mềm OpenVPN.
- Cài đặt, tích hợp bộ tham số an toàn của hệ mật RSA vào quá trình xác thực,
trao đổi khóa trong bộ giao thức SSL/TLS.
- Xây dựng bộ phần mềm thử nghiệm bảo mật đường truyền PMBM_VPN dựa
trên công nghệ OpenVPN có tích hợp các tham số và thuật toán mã khối an
toàn, hiệu quả khắc phục được một số điểm yếu của bộ giao thức SSL/TLS đã
phân tích trong chương 1.
- Thử nghiệm và đánh giá tính an ninh an toàn, tốc độ thực thi của bộ phần mềm
PMBM_VPN. Kết quả thử nghiệm khẳng định giải pháp tích hợp tham số mật
mã RSA và thuật toán mã khối BC_VPN nâng cao tính an toàn cho giao thức
SSL/TLS trong xây dựng phần mềm bảo mật dữ liệu trên đường truyền là
đúng đắn, hiệu quả và có tính khả thi cao.
106
KẾT LUẬN
Bảo mật thông tin trên mạng máy tính bằng kỹ thuật mật mã là một lĩnh vực
rất rộng lớn. Với các cấu trúc mạng và giao thức mạng khác nhau chúng ta có
những giải pháp khác nhau trong việc can thiệp kỹ thuật mật mã vào quá trình
truyền tin trên mạng máy tính.
A. Các kết quả Luận án đã đạ t được:
Luận án tập trung nghiên cứu và đã đạt được những kết quả sau:
- Nghiên cứu các vấn đề cơ bản về an ninh, an toàn mạng máy tính. Phân tích
bộ giao thức TCP/IP và khả năng tích hợp mật mã vào các tầng trong mô
hình giao thức TCP/IP để bảo mật thông tin.
- Phân tích bộ giao thức SSL/TLS, các thành phần cơ bản trong bộ giao thức,
chỉ ra những điểm yếu mất an ninh, an toàn trong giao thức và những giải
pháp phòng chống, khắc phục điểm yếu.
- Nghiên cứu cập nhật giả thiết để xác định độ dài modulo an toàn và đề xuất
một tiêu chuẩn mới đối với số mũ công khai trong hệ mật RSA, xây dựng
thuật toán sinh tham số thỏa mãn ngưỡng an toàn đã xác định.
- Nghiên cứu đề xuất 02 ma trận tuyến tính có tính chất mật mã tốt để cải tiến
tầng tuyến tính của các mã pháp dạng AES. Xây dựng mã khối BC_VPN trên
cơ sở mã pháp dạng AES kính thước khối 128 bit, kích thước khóa 256 bit
với ma trận MDS tựa vòng luận án đã nghiên cứu đề xuất thay thế ma trận
trong biến đổi MixColumns.
- Phân tích mô hình, cấu trúc hoạt động của bộ phần mềm OpenVPN. Kiểm
soát và làm chủ một số module cơ bản trong bộ phần mềm mã nguồn mở.
Xác định rõ giải pháp, điểm can thiệp tích hợp mật mã vào các thành phần
trong bộ phần mềm OpenVPN.
- Xây dựng bộ phần mềm thử nghiệm bảo mật dữ liệu trên đường truyền
PMBM_VPN dựa trên công nghệ OpenVPN có tích hợp các tham số RSA và
107
thuật toán mật mã khối BC_VPN an toàn, hiệu quả khắc phục được một số
điểm yếu của bộ giao thức SSL/TLS.
- Thử nghiệm và đánh giá tính an ninh an toàn, hiệu năng của bộ phần mềm
PMBM_VPN và định hướng nghiên cứu hoàn thiện để có thể ứng dụng được
trong thực tế.
B. Những đóng góp mới của luận án:
- Nghiên cứu đề xuất một tiêu chuẩn mới đối với số mũ công khai trong hệ mật
RSA, xây dựng thuật toán sinh tham số thỏa mãn ngưỡng an toàn đã xác
định.
- Nghiên cứu đề xuất được 02 ma trận tuyến tính C.like1(149, Cir(1,4, 149)),
C.like2(2, Cir(1, 106, 2)) có tính chất mật mã tốt để cải tiến tầng tuyến tính
của các mã pháp dạng AES. Xây dựng mã khối BC_VPN trên cơ sở mã pháp
dạng AES kích thước khối 128 bit, kích thước khóa 256 bit với ma trận MDS
tựa vòng luận án đã nghiên cứu đề xuất.
- Xây dựng bộ phần mềm thử nghiệm bảo mật dữ liệu trên đường truyền
PMBM_VPN dựa trên công nghệ OpenVPN có tích hợp các tham số RSA và
thuật toán mã khối BC_VPN an toàn, hiệu quả khắc phục được một số điểm
yếu của bộ giao thức SSL/TLS.
C. Hướng nghiên cứu tiếp theo:
- Nghiên cứu phát triển các thành tố mật mã mới theo hướng đảm bảo an toàn
và hiệu quả trong các môi trường sử dụng. Ứng dụng ma trận đã đề xuất cài
đặt phần cứng cụ thể đối với mã pháp tựa AES để có thể đánh giá chính xác
hơn ảnh hưởng của tầng tuyến tính đề xuất khi so sánh với phiên bản gốc
hoặc là với các đề xuất khác.
- Áp dụng các kết quả đã nghiên cứu, xây dựng và hoàn thiện bộ phần mềm
bảo mật dữ liệu trên đường truyền dựa trên công nghệ OpenVPN có tích hợp
các tham số và thuật toán mật mã khối an toàn, hiệu quả để bảo mật các dịch
vụ, ứng dụng trên mạng máy tính.
108
DANH MỤC CÁC CÔNG TRÌNH KHOA HỌC ĐÃ CÔNG BỐ
[1] Nguyễn Ngọc Điệp, Phạm Văn Tuấn, Nguyễn Thành Trung, “Tấn công lược
đồ xác thực mật khẩu từ xa với Smart Card”, tạp chí nghiên cứu KH&CN
Quân sự , số 1, tháng 6-2009.
[2] Nguyễn Ngọc Điệp, Trần Hồng Thái, Nguyễn Đức Tâm, “Một số kết quả về
thám mã vi sai với chuẩn mã dữ liệu DES”, Tạp chí Nghiên cứu Khoa học
Công nghệ Quân sự, số 8, tháng 8, năm 2010.
[3] Hoàng Minh, Nguyễn Ngọc Điệp, Nguyễn Quốc Toàn, “Về một giao thức
trao đổi khóa an toàn làm cơ sở cho trao đổi khóa trên mạng Internet”, Tạp
chí Nghiên cứu Khoa học và công nghệ quân sự số 28, tháng 12-2013.
[4] Nguyễn Ngọc Điệp, Nguyễn Đào Trường, Nguyễn Quốc Toàn, “Một số tấn
công giao thức trao đổi khóa” Kỷ yếu Hội nghị Quốc gia về Điện tử -
Truyền thông (REV2013-KC01), tháng 12-2013.
[5] Nguyễn Ngọc Điệp, Nguyễn Đào Trường, Nguyễn Thị Thu Nga, “Phương
pháp mã hóa liên tiếp và tiêu chuẩn cho tham số e”, Tạp chí Nghiên cứu
Khoa học và công nghệ quân sự tháng 8-2015.
[6] Nguyễn Ngọc Điệp, “Một đề xuất ma trận MDS 4x4 an toàn, hiệu quả cho
các mã pháp dạng AES”, Tạp chí Nghiên cứu Khoa học và công nghệ quân
sự số 46, tháng 12 - 2016.
109
TÀI LIỆU THAM KHẢO
[1]. Alshamsi, T.Saito (2004), A technical Comparison of IPSec an SSL. [2]. ANSI X9.31, American National Standard for Financial Services X9.31, Digital Signatures Using Reversible Public Key Cryptography for the Financial Services Industry (rDSA), 2-1998.
[3]. Alan O. Freier, Philip Karlton, Paul C. Kocher: The SSL Protocol
Version 3.0, November 18 1996.
[4]. Arjen K. Lenstra, Eric R. Verheul, Selecting Cryptographic Key Sizes,
Springer-Verlag Berlin Heidelberger 2000, pp. 446-465.
[5]. Arjen K. Lenstra, Key Length, Lucent Technologies and Technische Universiteit Eindhoven, 1 North Gate Road, Mendham, NJ 07945-3104, USA, June 30, 2004
[6]. Bodo Moeller (2004), Security of CBC Ciphersuites in SSL/TLS: Problems and Countermeasures, http://www.openssl.org/~bodo/tls- cbc.txt.
[7]. Charles P.Pfleeger (1989), Security in Computing, Prentice - Hall, Inc.,
USA.
[8]. Chuck Eastton (2016), Modern Cryptography Applied Mathematics for
Encryption and Information Security. Mc Graw Hill Education.
[9]. Charlie Kaufman, Radia Perlman, mike Speciner (1995), Network Security Private Communication in a Public World, Prentice – Hall, Inc., USA.
[10]. C.Kaufman, “Internet Key Exchange (IKEv2) Protocol” RFC 4306,
Dec.2005.
[11]. David Wagner, Bruce Schneier (1996), Analysis of the SSL 3.0 protocol. [12]. Daemen, J., L. Knudsen, and V. Rijmen (1997), The block cipher
Square. in Fast Software Encryption. Springer.
[13]. E. Rescorla (2000), SSL and TLS: Designing and Building Secure
Systems SSL and TLS, Addison-Wesley.
[14]. Federal Information Processing Standards Publication (2009): Digital
Signature Standard (DSS).
[15]. FIB PUB 199 (2004), Standards for Security Categorization of Federal
Information and Information Systems, NIST.
[16]. FIPS PUB 186-3 (June, 2009), Digital Signature Standard (DSS). [17]. FIPS PUB 186-4 (July, 2013), Digital Signature Standard (DSS).
110
[18]. Gregory V.Bard (2004), Vulnerability of SSL to Chosen-Plaintext Attack. [19]. Gregory V. Bard (2006), Modes of Encryption Secure against Blockwise-
Adaptive Chosen-Plaintext Attack.
[20]. Gregory V.Bard (2006), A challenging but feasible blockwise-adaptive
chosen- plaintext attack on SSL.
[21]. Germamo Caronni, Hannes Lubich, Ashar Aziz, To Markson, Rich
Skrenta, Skip Security the Internet, http://skip.incog.com.
[22]. Guo, J., et al (2011), The LED block cipher, in Cryptographic Hardware
and Embedded Systems–CHES 2011, Springer. p. 326-341.
to
[23]. H. Krawczyk (2003), SIGMA: The SIGn-and-MAc Approach Authenticated Diffie-Hellman and its Use in the IKE protocols.
[24]. IPSec, VPN, and Firewall Concepts. Cisco Press, 2004. [25]. ITS “Information Security Standard”,
http://www.diffuse.org/secure.html.
[26]. John R.Vacca (2009), Computer And Information Security Handbook,
Morgan Kaufmann Publisher
[27]. John R.Vacca (1996), Internet Security Secrets, IDC Books Worldwide,
Inc., USA.
[28]. J. Friedlander, Carl Pomerance, and I. Shparlinski (2001), Period of the power generator and small values of Carmichael’s function, Math. Comput., 70(236):1591–1605.
[29]. J. Daemen, V. Rijmen (2001), The Design of Rijndael: AES - The
Advanced Encryption Standard, Springer-Verlag.
[30]. Langford, S.K. and M.E. Hellman (1994), Differential-linear
cryptanalysis. in Advances in Cryptology - CRYPTO’94. Springer. [31]. J¨org Schwenk, Christopher Meyer, Horst G¨ortz (2013), Lessons Learned From Previous SSL/TLS AttacksA Brief Chronology Of Attacks And Weaknesses. https://eprint.iacr.org/2013/049.pdf .
[32]. M. Jason Hinek (2010), Cryptanalysis of RSA and its Variants. Chapman
Hall.
[33]. Мак-Вильямс, Ф.Д. (1979), Теория кодов, исправляющих ошибки. [34]. Oscar Fajardo, Jon Ander Picó, Alejandro (2011), New Tunnelling
capabilities for BGP/MPLS IP VPN in GNU/Linux.
[35]. P. Junod and S. Vaudenay (2004), Perfect diffusion primitives for block cipher – Building efficient MDS matrices. In Selected Areas in Cryptology (SAC 2004), LNCS 3357, pp. 84-99, Springer-Verlag.
111
[36]. R. Canetti and H. Krawczyk (2001), Analysis of key exchange protocols and their use for building secure channels, Advances in Cryptology- EUROCRYPT 2001.
[37]. Ph.D. Rolf OppligerE (2009), SSL and TLS Theory and Practice, Artech
House
[38]. RSA Laboratories, PKSC#1 v2.1: RSA Cryptography Standard, June 14,
2002.
[39]. R. Oppliger, R. Hauser and D. Basin, SSL/TLS Session-Aware User Authentication Or Howto Effectively Thwart the Man-in-the-Middle. [40]. S. Boyd and A. Mathuria (2010), Protocols for Authentication and Key
Establishment, Springer-Verlag.
[41]. Schneier, Bruce, and Doug Whiting, A Performance Comparison of the
Five AES Finalists, AES Candidate Conference. 2000
[42]. Shannon Claude E, Communication theory of secrecy systems, Bell
system technical journal, 1949. 28(4): p. 656-715.
[43]. Sim, S.M., et al (2015), Lightweight MDS Involution Matrices. in FSE.
2015.
[44]. S.Vaudenay (2002), Security Flaws Included by CBC padding. [45]. Sidnie Feit (1993), TCP/IP - Architecture, Protocol, and
Implementation, McGraw-Hill, Inc., Singapore.
[46]. T. Dierks, C. Allent (1999): The TLS Protocol Version 1.0, January. [47]. V. Klíma, O. Pokorný and T. Rosa, Attacking RSA-based Sessions in
SSL/TLS.
[48]. W.Richard Stevens (1996), TCP/IP Illustrated Volume 1,2,3, Addison-
wesley publishing company, USA.
[49]. Warwick Forrd (1994), Computer Communications Security, Prentice-
Hall, Inc., USA.
[50]. Wenbo Mao (2004), Modern Cryptography Theory and Practice.
Hewlett-Packard Company, Prentice Hall.
[51]. William Caelli, Dennis Longley, Michael Shain (1994), Information
Security Handbook, Macmillan Press Ltd., Great Britain.
[52]. William Stallings, Ph.D. (1999), Cryptography and Network Security, Principles and Practice, Second Edition, Prentice - Hall, Inc., USA. [53]. William Stalling (2011), Cryptography and Network Security, Principles
and Practice, Fifth Edition, Prentice Hall.
[54]. W. Diffie and M.E. Hellman (1976), New directions in cryptography,
IEEE Trans. Info. Theory IT-22 No.6, Nov. 1976, (644-654).
112
[55]. Z'aba, M.R. (2010), Analysis of linear relationships in block ciphers.
Luận án tiến sĩ của Queensland University of Technology.
[56]. NIST Special Publication 800-56B: Recommendation for Pair-Wise Key Establishment Schemes Using Integer Factorization Cryptography, 2009. [57]. NIST Special Publication 800-131A: Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths, 2011.
[58]. Зензин, О. and М. Иванов, Стардарт криптографической защиты-
AES. Конечные поля. 2002: КУДРИЦ-ОБРАЗ М.
[59]. Hoàng Văn Quân (2015), Đề xuất ma trận MDS đạt hiệu năng cao khi cài đặt trên phần cứng cho các mã pháp dạng AES, Tạp chí Nghiên cứu KH&CN quân sự, Số 40, 12 - 2015.
[60]. Hoàng Văn Quân (2016), Nghiên cứu giải pháp nâng cao hiệu quả bảo mật thông tin trên mạng truyền số liệu đa dịch vụ, Luận án tiến sỹ của Viện Khoa học Công nghệ Quân sự.
[61]. Nguyễn Đức mạnh (2012), Nghiên cứu giải pháp nâng cao tính an toàn cho giao thức SSL/TLS, Luận án tiến sỹ của Viện Khoa học - Công nghệ Quân sự.
[62]. Nguyễn Tuấn Anh (2016), Lỗ hổng DROWN trong giao thức SSL/TLS,
Tạp chí An toàn thông tin, số 2 năm 2016.
[63]. Một số xu hướng tấn công mạng năm 2016, trang 58-60, Tạp chí An toàn
thông tin, Số 1 - Năm 2016.
[64]. TCVN 7635:2007, Tiêu chuẩn Quốc gia. Kỹ thuật Mật mã - Chữ ký số.
Hà Nội 2007.
[65]. Trần Duy Lai, Đào Văn Giá (2001-2005), Nghiên cứu một số vấn đề bảo mật và an toàn thông tin cho các mạng dùng giao thức liên mạng IP, Đề tài cấp Nhà nước KC.01.01.
[66]. Trần Duy Lai (2007-2009), Nghiên cứu xây dựng chuẩn mật mã
Quốc gia Việt Nam, Đề tài cấp Nhà nước.
[67]. Nhiệm vụ Hợp tác về Khoa học công nghệ theo Nghị định thư (2012- 2015), Nghiên cứu giải pháp bảo mật mạng theo công nghệ chuyển mạch nhãn đa giao thức MPLS (Multi Protocol Label Switching).
[68]. http:// www.openvpn.net [69]. http:// www.openssl.com [70]. http://www.physorg.com/news/2011-03-petaflops-supercomputer-oak-
ridge-facility.html
[71]. https://www.top500.org/lists/2016/06/
113
[72]. http://www.emc.com/emc-plus/rsa-labs/historical/the-rsa-factoring-
challenge.htm
[73]. https://www.keylength.com/en/compare/ [74]. https://tools.ietf.org/html/rfc5246_ RFC 5246 (August 2008) - The
Transport Layer Security.
[75]. http://www.ipa.gov.jp/security/enc/CRYPTREC
/index-e.
[76]. http://www.cryptonessie.org. [77]. http://www.nist.gov/
114
PHỤ LỤC: CÁC MODULE CHƯƠNG TRÌNH, KẾT QUẢ THỬ NGHIỆM
1. Chương trình sinh tham số hệ mật RSA
Trong phụ lục luận án trình bày các module chương trình sinh số ngẫu nhiên
X9.17, chương trình sinh số nguyên tố của Shawer-Taylor. Cuối cùng là phần mô tả
bộ chương trình sinh tham số an toàn cho hệ mật RSA thỏa mãn các tiêu chuẩn đã đề
xuất cho lĩnh vực kinh tế - xã hội.
1.1. Module chương trình sinh số ngẫu nhiên X9.17 Tên thủ tục: prng_ANSI_X917 Đầu vào:
L: Số bít cần sinh ngẫu nhiên; V0: 128 bít ngẫu nhiên lựa chọn bởi user DTj: 128 bít date/time của hệ thống; K: 128 bít khoá cho AES. Số ngẫu nhiên p có L bít.
Ij = AESK(DTj) xj = AESK(Ij XOR Vj-1) Vj = AESK(Ij XOR xj) p ← p || xj p = null for j=1 to L/128 p ← Lấy L bít bên trái của p
unsigned long prng_ANSI_X917(unsigned char *rnd,
V[i]=malloc(16);//V[i] la so 128 bits
unsigned long bits, unsigned char *V0, unsigned char *userKey){ int i, j; int BUOC_LAP=bits/128; unsigned long bytes=(bits+7)/8; AES_KEY *K=(AES_KEY*)malloc(sizeof(AES_KEY)); unsigned char I[16]; unsigned char *DT=(unsigned char *)malloc(16); unsigned char x[16]; unsigned char tmp[16]; unsigned char *p=(unsigned char*)malloc(bytes); unsigned char **V=malloc(4*(BUOC_LAP+1)); for (i=0; i<=BUOC_LAP; i++) memcpy(V[0], V0, 16);
Đầu ra: Thuật toán: Mô tả cụ thể:
/* Thiết lập 128 bít khoá K cho AES */ AES_set_encrypt_key(userKey, 128, K); memset(p, 0, bytes); memset(DT, 0, 16);
115
tmp[i]=I[i]^V[j-1][i];
free(V[i]);
/* Thực hiện vòng lặp sinh NN */ for(j=1; j<=BUOC_LAP; j++){ DT = get_128bits_DT(); AES_encrypt(DT, I, K); for(i=0; i<16; i++) AES_encrypt(tmp, x, K); for(i=0; i<16; i++) tmp[i]=I[i]^x[i]; AES_encrypt(tmp, V[j], K); /* Tính p=p||x[j] */ memcpy(p+16*(j-1), x, 16); } /* Lấy đầu ra */ memcpy(rnd, p, bytes); free(K); free(p); free(V); free(DT); for (i=0; i<=BUOC_LAP; i++) return bytes;
}
1.2. Module chương trình sinh số nguyên tố của Shawer-Taylor
Tên thủ tục: ShawerTaylor_Gen Đầu vào:
k - số bít của số nguyên tố cần sinh và một giá trị cố định L-xác định giới hạn sử dụng phép chia tầm thường - theo bít. N: Số nguyên tố sinh được
void ShawerTaylor_Gen(unsigned int k, big N) {……………
n = OddRandom(k);
Đầu ra: Mô tả chi tiết:
/* Bước 1: */ if (k <= 20) { /* Giới hạn phép chia tầm thường L=221 */ /* Thực hiện sinh số nguyên tố lẻ k bit, n */ do { } while (!trial_small_division(n)); /* Gán n vào số lớn zn*/ uconvert(n, *zn); } else {
/* Bước 2: */ if(k%2==1) k1=(k+3)/2; /* Nếu k lẻ */ else k1=k/2+1; /* Nếu k chẵn */ SHAWETAYLOR_PRIME(k1, &zq); /* Gọi đệ quy */
116
/* Bước 3: Lựa chọn ngẫu nhiên một số nguyên x
GenRandomZ(k, &zx);
/* Bước 4: Tính t=[x/2q]+1 */ sftbit(zq, 1, zm); divide(zx, zm, zt); incr(zt, 1, zt);
/* Bước 5: Tính zb = 2tq+1 */ multiply(zt, zm, zb); incr(zb, 1, zb); /* Tính zc =2^k */ sftbit(z_one, k, zc);
/* Vòng lặp các bước từ 5 đến 8 */ success=0; while(!success){
/* Tính t = [2^(k-1)/(2q)]+1 */ sftbit(zc, -1, zc); /*Tính zc=2^(k-
divide(zc,
zm,
zt);/*t=[2^(k-
incr(zt, 1, zt); /* Tính t = t+1 */
/* Tính n = n+1 */
thỏa mãn 2^k-1 <= x < 2^k */ /* Kiểm tra điều kiện 2tq+1 >= 2^k */ if (compare(zb, zc) >= 0) { 1)*/ 1)/(2q)]*/ } /* Bước 6: Tính n = 2tq + 1 */ multiply(zt, zm, *zn); /* Tính n=t.2q*/ incr(*zn, 1, *zn);
bigrand(zc, za);
/* Bước 7: */ /* Lựa chọn a thỏa mãn: 2<=a<=n-2 */ incr(*zn, -2, zc); /* Tính zc = zn – 2 */ /* Vòng lặp để sinh số nguyên a */ do { }
while(compare(za,z2)<0||compare(za,zc)>0);
/* Tính x=a^2t mod n */ sftbit(zt, 1, z2t); /* Tính z2t=2*zt*/ powmod(za, z2t, *zn, zx); /* Kiểm tra 3 điều kiện */ /* Kiểm tra điều kiện 1: x != 1*/
117
if (compare(zx, z_one) != 0) {
// Tính gcd(x-1,n) decr(zx, 1, zc); //zc = zx -1 egcd(zc, *zn, zr); //zr = gcd(zc, *zn) /* Kiểm tra điều kiện 2: gcd(x-1,n)=1
*/
if (compare(zr, z_one) == 0){
success=1;
//Tính zc=x^q mod n powmod(zx, zq, *zn, zc); /* Kiểm tra ĐK 3: x^q=1 mod n */ if (compare(zc, z_one) == 0){ }
}
} if(success==0)
incr(zt, 1, zt); /* Bước 8: Tính t=t+1
}
*/ }
}
1.3. Chương trình sinh tham số cho lĩnh vực kinh tế - xã hội
Hướng dẫn sử dụng
Bộ chương trình sinh tham số RSA an toàn cho lĩnh vực kinh tế - xã hội là
một file chạy genRSA.exe (124KB) được biên dịch trên nền tảng Windows 32 bít
(chạy được trên các môi trường Windows XP, Windows Server 2003, Windows 7
32 bít và Windows Server 2008 32 bít).
Các bước để sinh một bộ tham số RSA (N, e, d) như sau:
Bước 1: Chạy file genRSA.exe
Bước 2: Nhập độ dài modulo: chọn một trong hai giá trị là 1536 hoặc
2048.
Bước 3: Nhập số bộ tham số cần sinh (100 bộ sẽ phải chạy trong vòng từ
1-2 ngày).
Kết quả:
File BangchungP.txt và Bangchung.Q.txt là file chứa các bằng chứng để
chứng minh tính nguyên tố của p và q.
118
File Thamso.txt chứa bộ tham số RSA (N=p.q, e, d).
Trong file Thamso.txt có thông tin về thời gian sinh đối với một bộ tham
số RSA.
Cụ thể về một bộ tham số như sau:
=== BO THAM SO RSA AN TOAN 1 ===
Modulus n (2048 bits):
B3E3DE657F48E88E8B3563BBDD0998FC49E191F00B772AAD7A010B0C4A8C31A8A7AC4BA4F17A8873C4C4C19
AF0D5CC6460F343C1E597FC86C5AA536743E463747FF21E35473E20CCF773359A2702DD3DD832ABFC01778821D
FF54291F74ACB984E345DB2601CC3F0F6B550C897BF4F9D15D41F6206979E6978AD286CFD64DFB0DFF88278175
A8339B5D8A3B64B6BCEC7D6CF9E338356F5A0754A2D9C5B84B45CA253F5D657E17BA390F17A14205BB675262
A23677F7C5DE4058E235B70DF3042C2E1D23E999422C5D4F29F11B1C52A3410510BC3C5BC69AA61AFD1B6530F
4B48E1123571A6ABB5386DEF30D700407FAA5F4626B01FDFDC8964AAE14865DD8F99
Public exponent e (252 bits):
A5D09AECF8C1ADF2131B3A46CAF8EBCC97DD89FE9AD96B7A51E5828A2CD2C3B
Private exponent d (2044 bits):
E976BACB16DE7AC26403D38212F4D8BD3652B261B452E4F9C8FD9B77A072A00E53DACD57530B9F329AAD6526
FC42253AD532B5DDB47CF6DDF58D5568DE91828E4279691EB0359A92D84C47D5B14B8C61BD2F2C8EA029292C
19D65D796D222D3176F364A3EBBD161646CF8A177D87E24613A89AC8F5DC8231A529FDA9949E96CB0634012031
5305EA0B5A7F01938C695350B51362F0AB72F75212D866B97E1CB2ACD4CA57A2707E3EF7135B763FD04769AEB6
B2D8F0D1B099B0F2297376C3FA0BB4BBC1F6EB3476FF395D26A7D0842E1CA36E8F97EF5BFB8CD6552C1178CA
05B645030A52EC55E65E8717719DD8FF9478273567F5E94EC28625F53881309938B
Thoi gian sinh: 224
=== BO THAM SO RSA AN TOAN 2 ===
Modulus n (2048 bits):
D72C496F98D2F7B65DA1A427A75ABE0478872BD8E2282ED32782857ACD4DF2F63B35580F8EB98AB168F4CABE
4B03337B7816DE13C80C09E381D81466D6B394004979B064B3F3AC5DF138CBABD2FD8B15D08D953DB950F1061
FD0E0D7959E790969B0C532F830DF39094466589F1397E097765FB9825E75D2BEF090055C20CFC157C467DB18E48
C93BE23F3A7AD7A8232C66336CFA62617E02CC69A2B7D92F9BCDF4486DD9A4A58E499DDCD4B3D030794916A
B38FACD492277ADBD83ECF2BC9B4719A94FB4D762D7BA04B76846FFCCC99E51466EEC9263FDA62FB146D93B
D07661AA1ACA5B41B573B6E4E9B66B17DE35E4162B71E83549C7FCF633963E94690AF
Public exponent e (254 bits):
25A682F7A52BD5480815ECEFFF4E16AD1F483E7859F08F84FE66E05B357D3D25
Private exponent d (2047 bits):
60B957BA8FCBA2166336EC768FA9AFBEB50DCE4D355D747DEC036B72B3F7979199A0A6C210CD55D49FAC398
E9F18C22C68E2427CE56AA57265F871BC97A94F94E8398FA9EB14940239788B355B653DD9D4792DFEDD1BFEE4
FDD02F5C513A994DADFF6F55E73FA0CCF7BB51F79BBE364196B5B7DDA4C8B2AF0ADC7F43671CAD4B1EA58F
4AF765262E4D33A0B90203F6E48815C3495244C4B34EA2071E02056A31105A871A597F7B87B7FAF9386159C2F180
1A636F2A008E09BE4E787BB8885C851DB24209491578BF42C553C134E19CAD7601447C4B00D721353A521B5FEC5
2740A097CA88E498EB8DF8EA00957B50B58DC5FD2132999436303ED7F3732EE7FD5 Thoi gian sinh: 139
119
Chú ý:
Các kết quả sẽ được ghi thêm vào file có sẵn.
Nếu máy tính có từ 2-4 core thì có thể chạy song song 2-4 tiến trình để
tăng số lượng các bộ tham số cần sinh.
Mô tả các thủ tục chính
Thuật toán sinh ngẫu nhiên một số nguyên sử dụng ANSI X9.17,
Thuật toán sinh số nguyên tố sử dụng thuật toán tất định của Shawer-Taylor.
Trong phần phụ lục, luận án chỉ đưa ra thủ tục sinh tham số PARAMGEN.
Thủ tục sinh tham số cho lĩnh vực KTXH:
Nguyên mẫu hàm: int PARAMGEN(int nlen, big n, big e, big d, int
num)
Input: nlen, num
Output: n, e, d
Giá trị trả về: Là 1 nếu sinh được một tham số thỏa mãn các
int PARAMGEN(int nlen, big n, big e, big d, int num) {
big p = mirvar(0), p1 = mirvar(0), p11=mirvar(0); big q = mirvar(0), q1 = mirvar(0), q11=mirvar(0); big tg= mirvar(0), tg1=mirvar(0), p2k = mirvar(0), p94=mirvar(0), p254=mirvar(0); big etg=mirvar(0), pm1=mirvar(0), qm1=mirvar(0), p1m1=mirvar(0), q1m1=mirvar(0); big gcd1 = mirvar(0), gcd2=mirvar(0), lcm=mirvar(0), input=mirvar(1);
long end, start; time_t t; int res =0, dlen, emax, emin; FILE *fp; start = time(&t); if (nlen == 1536) {dlen = 1220; emax=254; emin=94;} if (nlen == 2048) {dlen = 1434; emax=512; emin=94;}
tiêu chuẩn đã đề xuất, ngược lại trả về 0.
//Buoc 1 if (!GENPQ(nlen, p, p1, p11, input, "BangchungP.txt", 0))
goto FINISH;
copy(p, input);
120
//Buoc 2 if (!GENPQ(nlen, q, q1, q11, p, "BangchungQ.txt", 1))
goto FINISH;
//Buoc 3: da thuc hien trong thu tuc GENPQ
//Buoc 4 multiply(p, q, n); decr(p1, 1, p1m1); decr(q1, 1, q1m1); decr(p, 1, pm1); decr(q, 1, qm1); multiply(pm1, qm1, lcm); egcd(pm1, qm1, gcd1); divide(lcm,gcd1,lcm);
//Buoc 5: dựa theo cận của tham số e an toàn.
convert(1, tg); sftbit(tg, emin, p94); sftbit(tg, emax, p254); etg = Random(p94, p254);
if(subdivisible(etg,2)==1) incr(etg,1,etg);
//Buoc 6: Kiem tra dieu kien gcd(e,p-1), gcd(e,q-1) egcd(pm1, etg, gcd1); egcd(qm1, etg, gcd2); if ((compare(gcd1,One)!=0) || (compare(gcd2,One)!=0))
goto Step5;
//Buoc 7 divide(p1m1,p11,tg); powmod(etg, tg, p1, tg1); if(compare(tg1, One)==0) goto Step5; divide(q1m1,q11,tg); powmod(etg, tg, q1, tg1); if(compare(tg1, One)==0)
goto Step5;
//Buoc 8 copy(etg,e); copy(etg,d); xgcd(d,lcm,d,d,d); //d=e^(-1) mod lcm
/* */
121
//Buoc 9 convert(1, tg); sftbit(tg, dlen, p2k); if(compare(d, p2k)<0) goto Step5; end = time(&t); res = 1; fp = fopen("Thamso.txt","a"); mip->IOBASE=16; fprintf(fp,"=== BO THAM SO RSA AN TOAN THU %d===\n", num); fprintf(fp,"Modulus n (%d bits):\n", logb2(n)); cotnum(n, fp); fprintf(fp,"Public exponent e (%d bits):\n", logb2(e)); cotnum(e, fp); fprintf(fp,"Private exponent d (%d bits):\n", logb2(d)); cotnum(d, fp); fprintf(fp,"Thoi gian sinh: %ld\n", end-start); fclose(fp);
FINISH:
mirkill(p);mirkill(tg); mirkill(p1); mirkill(p11); mirkill(q);mirkill(q1); mirkill(q11); mirkill(tg1); mirkill(pm1); mirkill(qm1); mirkill(p1m1); mirkill(q1m1);mirkill(gcd1); mirkill(gcd2); mirkill(lcm);mirkill(p254); mirkill(p2k); mirkill(p101); mirkill(etg); mirkill(input); return res;
}
2. Cài đặt thuật toán mã khối BC_VPN Trong phụ lục luận án trình bày các modul chương trình cơ bản thực hiện
thuật toán mã khối BC_VPN (các modul mã hóa, giải mã dữ liệu).
u32 s0, s1, s2, s3, t0, t1, t2, t3;
Định nghĩa, khai báo cáo ma trận tuyến tính: được thực hiện trong file Table.h
void Encrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 pt[16], u8 ct[16]) { /* Chuyen khoi ro tu dang byte (8 bit) sang cac tu 4 byte (32 bit) va thuc hien cong XOR voi khoa dau: */ s0 = GETU32(pt ) ^ rk[0]; s1 = GETU32(pt + 4) ^ rk[1]; s2 = GETU32(pt + 8) ^ rk[2]; s3 = GETU32(pt + 12) ^ rk[3]; /* Vong 1: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];
122
t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7]; /* Vong 2: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11]; /* Vong 3: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15]; /* Vong 4: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19]; /* Vong 5: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23]; /* Vong 6: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27]; /* Vong 7: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];
123
t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31]; /* Vong 8: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35]; /* Vong 9: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39]; if (Nr > 10) { /* Vong 10: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43]; /* Vong 11: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47]; if (Nr > 12) { /* Vong 12: */ s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48]; s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49]; s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50]; s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51]; /* Vong 13: */ t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52]; t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53]; t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54]; t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55]; }
124
(Te4[(t0 >> 24) ] & 0xff000000) ^ (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t3 ) & 0xff] & 0x000000ff) ^ rk[0];
(Te4[(t1 >> 24) ] & 0xff000000) ^ (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t0 ) & 0xff] & 0x000000ff) ^ rk[1];
(Te4[(t2 >> 24) ] & 0xff000000) ^ (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t1 ) & 0xff] & 0x000000ff) ^ rk[2];
(Te4[(t3 >> 24) ] & 0xff000000) ^ (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ (Te4[(t2 ) & 0xff] & 0x000000ff) ^ rk[3];
s0 = PUTU32(ct , s0); s1 = PUTU32(ct + 4, s1); s2 = PUTU32(ct + 8, s2); s3 = PUTU32(ct + 12, s3);
u32 s0, s1, s2, s3, t0, t1, t2, t3;
*/
} rk += Nr << 2; /* Vong cuoi Chuyen cac tu 32 bit thanh cac byte: */ } void Decrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 ct[16], u8 pt[16]) { /* Chuyen cac byte ban ma thanh cac tu 32 bit. Ap dung cong khoa dau: s0 = GETU32(ct ) ^ rk[0]; s1 = GETU32(ct + 4) ^ rk[1]; s2 = GETU32(ct + 8) ^ rk[2]; s3 = GETU32(ct + 12) ^ rk[3]; /* Vong 1: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7]; /* Vong 2: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9];
125
s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11]; /* round 3: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15]; /* Vong 4: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19]; /* Vong 5: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23]; /* Vong 6: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27]; /* Vong 7: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31]; /* Vong 8: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35]; /* Vong 9: */
126
rk += Nr << 2;
(Td4[(t0 >> 24) ] & 0xff000000) ^ (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t1 ) & 0xff] & 0x000000ff) ^ rk[0];
t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39]; if (Nr > 10) { /* Vong 10: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43]; /* Vong 11: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47]; if (Nr > 12) { /* Vong 12: */ s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48]; s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49]; s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50]; s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51]; /* Vong 13: */ t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52]; t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53]; t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54]; t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55]; } } /* Xu ly vong cuoi, Chuyen cac tu 32 bit ve dang byte: */
s0 = PUTU32(pt , s0); s1 =
(Td4[(t1 >> 24) ] & 0xff000000) ^
127
(Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t2 ) & 0xff] & 0x000000ff) ^ rk[1];
(Td4[(t2 >> 24) ] & 0xff000000) ^ (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t3 ) & 0xff] & 0x000000ff) ^ rk[2];
(Td4[(t3 >> 24) ] & 0xff000000) ^ (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ (Td4[(t0 ) & 0xff] & 0x000000ff) ^ rk[3];
PUTU32(pt + 4, s1); s2 = PUTU32(pt + 8, s2); s3 = PUTU32(pt + 12, s3);
} 3. Cài đặt và thử nghiệm bộ chương trình PMBM_VPN
Cấu hình máy chủ cài đặt PMBM_VPN Server:
- Intel® Core™ i3-4160 CPU @ 3.60GHz 3.59GHz
- Hệ điều hành: Micrsoft Windows Server 2012, 64 bit
- RAM 8G
Cấu hình máy trạm cài đặt PMBM_VPN Client:
- Intel® Core™ i7-4710HQ CPU @ 2.50GHz 2.50GHz
- Hệ điều hành: Micrsoft Windows 8, 64 bit
- RAM 8G
Nhóm đề tài sử dụng công cụ Jperf 2.2 để đánh giá tốc độ của bộ phần mềm
PMBM_VPN.
Dưới đây là một số kết quả thử nghiệm với thiết lập cấu hình bộ phần mềm
PMBM_VPN sử dụng thuật toán mã khối AES ở chế độ OFB
Cấu hình trên máy VPN Server sử dụng mã pháp AES-256-OFB
128
Hình 1: Cấu hình cho VPN Server
Cấu hình trên máy VPN Client sử dụng mã pháp AES-256-OFB
Hình 2: Cấu hình cho VPN Client
129
Một số kết quả thử nghiệm
Hình 3: Tốc độ của phần mềm PMBM_VPN (01 luồng)
Hình 4: Tốc độ của phần mềm PMBM_VPN (4 luồng)
130