Báo cáo thực hành hệ mã hoá khoá bí mật A51 RC4. Mật mã khóa đối xứng (hay mã hóa đối xứng) là một loại sơ đồ mã hóa trong đó một khóa giống nhau sẽ vừa được dùng để mã hóa, vừa được dùng để giải mã các tệp tin. Phương pháp mã hóa thông tin này đã được sử dụng khá phổ biến từ nhiều thập kỷ với mục đích tạo ra cách thức liên lạc bí mật giữa chính phủ với quân đội. Ngày nay, các thuật toán khóa đối xứng được ứng dụng rộng rãi trên nhiều hệ thống máy tính khác nhau nhằm tăng cường bảo mật cho dữ liệu.
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC HỒNG ĐỨC BÁO CÁO THỰC HÀNH Bộ môn : Lý thuyết mật mã Giáo viên môn : Trịnh Viết Cường Nhóm thực : Nhóm Thành viên : Nguyễn Hữu Nhân ( Trưởng nhóm ) Lê Ngọc Hưng Phạm Hữu Long Lê Sỹ Nhật Linh Mục lục LỜI NÓI ĐẦU Cùng với phát triển máy tính, thơng tin ngày trở nên đa dạng, tin không đơn giản tin gồm chữ cái, mà gồm thơng tin định dạng văn tài liệu HTML… Ngồi tin xuất loại hình khác hình ảnh, video, âm thanh… Tất tin biểu diễn máy vi tính dạng dãy số nhị phân Trong máy tính chữ biểu diễn mã ASCII Và tương tự tin ngôn ngữ, tin nhị phân tồn số đặc tính thống kê mà người phá mã tận dụng để phá mã, mã tồn dạng nhị phân Mã hóa đại quan tâm đến vấn đề chống phá mã trường hợp biết trước rõ (known-plaintext), hay rõ lựa chọn (chosen-plaintext) Với đặc tính quan trọng thơng tin, việc bảo mật thơng tin ln trọng hàng đầu Vì vậy, phương pháp mã hoá giải mã đời, mang theo nhiệm vụ an toàn bảo mật thông tin cho người dùng Với hướng dẫn giảng viên môn Lý Thuyết Mật Mã, sau chúng em xin trình bày khái quát hệ mã hóa khóa đối xứng A51 RC4 Trong phần trình bày cịn nhiều thiếu sót Rất mong góp ý Thầy Trịnh Viết Cường bạn lớp để sản phẩm hoàn thiện Chúng em xin chân thành cảm ơn ! I) GIỚI THIỆU HỆ MÃ HOÁ 1) Giới thiệu hệ mã hố khố đối xứng Mật mã khóa đối xứng (hay mã hóa đối xứng) loại sơ đồ mã hóa khóa giống vừa dùng để mã hóa, vừa dùng để giải mã tệp tin Phương pháp mã hóa thơng tin sử dụng phổ biến từ nhiều thập kỷ với mục đích tạo cách thức liên lạc bí mật phủ với quân đội Ngày nay, thuật tốn khóa đối xứng ứng dụng rộng rãi nhiều hệ thống máy tính khác nhằm tăng cường bảo mật cho liệu - Cách thức hoạt động + Một sơ đồ mã hóa đối xứng thường sử dụng khóa đơn chia sẻ nhiều người dùng với Khóa dùng cho tác vụ mã hóa giải mã văn thơ (các tin nhắn mảnh liệu cần mã hóa) Quá trình mã hóa bao gồm việc chạy văn thơ (đầu vào) thơng qua thuật tốn mã hóa cịn gọi mật mã (cipher) lần luợt tạo mã ciphertext (đầu ra) + Khi sơ đồ mã hóa đủ mạnh cách để đọc truy cập thông tin chứa mã sử dụng khóa tương ứng để giải mã Quá trình giải mã chuyển đổi mã trở dạng văn thô ban đầu + Mức độ bảo mật hệ thống mã hóa đối xứng phụ thuộc vào độ khó việc suy đốn ngẫu nhiên khóa đối xứng theo hình thức cơng brute force Lấy ví dụ, để dị mã hóa khóa 128-bit tới vài tỷ năm sử dụng phần cứng máy tính thơng thường Thơng thường, khóa có độ dài tới 256-bit xem có độ bảo mật cao tuyệt đối, có khả chống lại hình thức cơng brute force từ máy tính lượng tử + Trong số sơ đồ mã hóa đối xứng sử dụng ngày có loại thơng dụng tảng mật mã block stream Trong mật mã block, liệu nhóm vào khối theo kích thước định trước, khối mã hóa khóa đối xứng thuật tốn mã hóa (vd: văn thơ 128-bit mã hóa thành mã 128-bit) Khác với mật mã block, mật mã stream không mã hóa liệu văn thơ theo block mà mã hóa theo gia số 1-bit (mỗi văn thơ 1bit mã hóa thành mã 1-bit lần) - Ưu nhược điểm + Các thuật toán đối xứng vừa có khả cung cấp mức độ bảo mật cao, vừa có khả cho phép mã hóa giải mã tin nhắn nhanh Mức độ đơn giản tương quan hệ thống đối xứng ưu điểm mặt logic sử dụng lượng tính tốn so với hệ thống bất đối xứng Thêm vào đó, cấp độ bảo mật mà mã hóa đối xứng mang lại nhân rộng lên cách đơn giản việc tăng độ dài khóa Với bit thêm vào độ dài khóa đối xứng, độ khó việc phá vỡ mã hóa cơng brute force tăng lên theo cấp số mũ + Mặc dù mã hóa đối xứng mang lại nhiều lợi ích rộng rãi, lại sở hữu bất lợi lớn: vấn đề cố hữu việc truyền tải khóa dùng để mã hóa giải mã liệu Nếu khóa chia sẻ lên kết nối khơng an tồn nguy bị can thiệp bên thứ lớn Khi người dùng không ủy quyền chiếm quyền truy cập khóa đối xứng liệu mã hóa khóa bị xâm phạm Để giải vấn đề này, nhiều giao thức website sử dụng kết hợp mã hóa đối xứng bất đối xứng nhằm thiết lập kết nối an tồn Giao thức mã hóa Bảo mật Tầng Vận tải (TLS) nhiều ví dụ điển hình sử dụng để bảo mật cho phần lớn mạng internet ngày + Cần lưu ý loại mã hóa máy tính dễ bị khai thác không vận hành cách Mặc dù khóa có độ dài đủ lớn triệt tiêu nguy công brute force tốn học, có sai sót việc triển khai từ phía lập trình viên tạo điểm yếu mở đường cho hacker thực vụ công mạng 2) Vấn đề bảo mật 2.1)A5/1 Một số công vào A5/1 công bố Cơ quan An ninh Quốc gia Hoa Kỳ thường xuyên giải mã tin nhắn A5/1 theo tài liệu nội phát hành Một số cơng địi hỏi giai đoạn tiền xử lý tốn mà sau mật mã bị phá vỡ vài phút vài giây Cho đến gần đây, điểm yếu sử dụng giả định đoạn văn biết Năm 2003, điểm yếu nghiêm trọng xác định khai thác Vào năm 2006, Elad Barkan, Eli Biham Nathan Keller trình diễn cơng chống lại A5/1, A5/3 chí GPRS cho phép kẻ cơng truy cập vào trị chuyện điện thoại di động GSM giải mã chúng thời gian thực lúc Theo giáo sư Jan Arild Audestad, q trình tiêu chuẩn hóa bắt đầu vào năm 1982, A5/1 ban đầu đề xuất có độ dài khóa 128 bit Vào thời điểm đó, 128 bit dự kiến an tồn 15 năm Hiện người ta tin 128 bit thực tế bảo mật đời điện toán lượng tử Người Anh đề xuất độ dài khóa 48 bit, người Tây Đức muốn mã hóa mạnh để bảo vệ chống lại gián điệp Đông Đức, đó, thỏa hiệp định độ dài khóa 54 bit [6] 2.2)RC4 Các nhà nghiên cứu bảo mật phát triển kỹ thuật thực tế khả thi có khả cơng thuật tốn mã hóa RC4, sử dụng rộng rãi để mã hóa thơng tin Internet Tuy nhiên, điểm yếu thuật toán phát nhiều năm qua lẽ RC4 phải “xóa sổ” khỏi Internet từ lâu Nhưng, có khoảng 50% tổng lưu lượng truy cập TLS bảo vệ thuật tốn mã hóa RC4 Hiện giờ, tình hình chí cịn tồi tệ hơn, hai nhà nghiên cứu an ninh Bỉ thực nghiệm công thực tế nhắm vào RC4, cho phép kẻ công tốn khoảng thời gian ngắn trước nhiều để phơi bày thơng tin mã hóa Tấn cơng nhắm vào RC4 với độ xác lên đến 94% Năm 2013, thực nghiệm cho thấy, việc tiến hành công vào RC4 cần 2.000 để hoàn thành Tuy nhiên, hồi tháng năm nay, tấn công tương tự nhắm vào thuật tốn mã hóa RC4 TLS tốn 312-776 để thực thi Gần đây, báo có tiêu đề “Phá vỡ thuật tốn mã hóa RC4 WPA-TKIP TLS” tác giá Mathy Vanhoef Frank Piessens, đến từ trường Đại học Leuven Bỉ, mô tả công thực nghiệm cho phép họ giải mã tập tin cookie mã hóa RC4 vịng 75 với độ xác 94% Trong viết đăng tải blog, nhà nghiên cứu cho hay: “Công việc tiến hành giúp giảm đáng kể thời gian thực thực công, rõ ràng cải thiện đáng lo ngại Cần phải xem xét việc tiếp tục sử dụng RC4” Phá vỡ giao thức mã hóa WPA – TKIP vịng Những kẻ cơng khai thác kỹ thuật để theo dõi đường kết nối nạn nhân trang web HTTPS bảo vệ, mạng không dây bảo vệ giao thức mã hóa WPA (WPA-TKIP) Trong trường hợp trang web HTTPS bảo vệ giao thức TLS, nhà nghiên cứu sử dụng trang web HTTP riêng biệt để đưa vào mã JavaScript, khiến cho máy tính mục tiêu truyền cookie xác thực mã hóa liên tục Họ giải mã cookie an tồn với độ xác 94% sử dụng 9×227 mã Cuộc công diễn khoảng 75 giờ, truyền 4450 yêu cầu giây Tuy nhiên, thực tế, thời gian cần thiết để thực công giảm xuống cịn 52 Tuy nhiên, công chống lại WPA-TKIP cần để thực hiện, cho phép kẻ công giải mã gói tùy ý Thơng tin chi tiết kết nhà nghiên cứu trình bày Hội nghị chuyên đề an ninh USEIX tới Washington DC Hiện tại, nhà nghiên cứu cơng bố báo cáo thức với nhiều chi tiết bổ sung kỹ thuật công họ 3) Giới thiệu khái quát hệ mã hoá A5/1 RC4: 3.1) A5/1 - A5/1 dùng mạng điện thoại GSM, để bảo mật liệu trình - liên lạc máy điện thoại trạm thu phát sóng vơ tuyến Đơn vị mã hóa A5/1 bít Bộ sinh số lần sinh bít bít - để sử dụng phép XOR Mã hóa A5/1 thực dễ dàng thiết bị phần cứng, tốc độ nhanh Do A5/1 sử dụng để mã hóa liệu Real-Time dãy bit audio 3.2) RC4 - RC4 dùng giao thức SSL để bảo mật liệu trình truyền liệu Web Server trình duyệt Web Ngồi RC4 cịn sử dụng mã - hóa WEP mạng Wireless LAN RC4 có độ dài khố khơng cố định, sơ đồ RC4 có sử dụng ghi bits (bộ đếm) Q1 Q2 khối thay (S-block) có kích thước 256x8 (256 phần tử, kích thước phần tử bits) Giá trị khối S hóan vị số từ đến 255 Bộ sinh số lần sinh byte để sử dụng phép - XOR Quá trình sinh số RC4 sinh dãy số ngẫu nhiên, khó đốn trước , RC4 đạt mức độ an toàn cao theo tinh thần mã hóa One-Time Pad - Mã hóa RC4 hồn toàn thực số nguyên byte tối ưu cho việc thiết lập phần mềm tốc độ thực nhanh so với mã khối ( - Block Cipher ) Mặc dù tồn từ lâu, RC4 (Rivest Cipher 4) thuật tốn mã hóa mật mã sử dụng rộng rãi thực thi nhiều giao thức phổ biến, bao gồm: – SSL (Secure Socket Layer) – TLS (Transport Layer Security) – WEP (Wired Equivalent Privacy) – WPA (Wi-Fi Protected Access) – RDP Microsoft (Remote Desktop Protocol) – BitTorrent – Và nhiều giao thức khác II) KẾ HOẠCH THỰC HIỆN BÀI TẬP LỚN 1) Nội dung thực mục tiêu đề ra: - Mục tiêu chính: + Thực mã hố thành cơng liệu nhập vào A5/1 RC4 (Encrypt) + Thực giải mã thành công liệu nhập vào A5/1 RC4 (Decrypt) - Mục tiêu phụ đề ra: + Thực việc hệ thống chọn key ngẫu nhiên thay nhập + Chấp nhận key nhập từ file + Chấp nhận mã hoá giải mã file truyền vào + Mã hoá loại file truyền vào ảnh (jpg, png,…), nhạc (mp3, mov,…) hay video (mp4, flv,…) + Tạo giao diện phù hợp với người sử dụng phổ thơng + Có thể lưu file mã hoá, file key + Tạo sở liệu sql để lưu trữ tài khoản mật liệu 2) Các công cụ sử dụng thực hành: - Ngôn ngữ : java ( sử dụng java swing để tạo nên phần giao diện cho thực hành ) - Phần mềm sử dụng : Netbeans III) CÁC BƯỚC THỰC HIỆN 1) Mã hoá: 1.1) A5/1 Cơ chế thực sinh số A5/1 sau: Bộ sinh số gồm ghi X, Y, Z Thanh ghi X gồm 19 bit, ký hiệu (x0, x1, …, x18) Thanh ghi Y gồm 22 bit (y0, y1, …, y21) Thanh ghi Z lưu 23 bit (z0, z1, …, z22) Khóa K ban đầu có chiều dài 64 bít phân bố vào ghi: K → XYZ Các ghi X, Y, Z biến đổi theo quy tắc: + Quay X: • t = XOR(x13, x16, x17,x18) • xj = xj-1 với j = 18, 17,16 , • x0 = t Code : if (x[8] == m) { int t = x[13] ^ x[16] ^ x[17] ^ x[18]; for (int j = 18; j > 0; j ) x[j] = x[j - 1]; x[0] = t; } + Quay Y: • t = XOR(y20,y21) • yj = yj-1 với j = 21, 20, 19, , • y0 = t Code: if (y[10] == m) { int t = y[20] ^ y[21]; for (int j = 21; j > 0; j ) y[j] = y[j - 1]; y[0] = t; } + Quay Z: • t = XOR(z7,z20,z21,z22 ) • zj = zj-1 với j = 22, 21, 20, , • z0 = t Code: if (z[10] == m) { int t = z[7] ^ z[20] ^ z[21] ^ z[22]; for (int j = 22; j > 0; j ) z[j] = z[j - 1]; z[0] = t; } Cho ba bit x, y, z, ta định nghĩa hàm maj(x, y, z) hàm “chiếm đa số”, nghĩa bít x, y, z có từ hai bít trở lên hàm trả giá trị 0, không hàm trả giá trị Tại bước sinh số thứ i, phép tính sau thực hiện: m = maj(x8, y10, z10) Code: int m = x[8] + y[10] + z[10]; //Neu bit tro len m = 1, nguoc lai m = 0; if (m == || m == 3) m = 1; else m = 0; • If x8 = m then thực quay X • If y10 = m then thực quay Y • If z10 = m then thực quay Z Và bít sinh là: si = XOR(x18,y21,z22) Bít si XOR với bít thứ i rõ để có bít thứ i mã theo quy tắc mã dòng 1.2) RC4: RC4 Khác với A5/1, đơn vị mã hóa RC4 bít RC4 dùng mảng S T mảng gồm 256 số nguyên bít (từ đến 255) Khóa dãy gồm N số ngun bít với N lấy giá trị từ đến 256 Bộ sinh số lần sinh bít để sử dụng phép XOR Quá trình sinh số RC4 gồm hai giai đoạn: • Giai đoạn khởi tạo: Code: public void KhoiTao() { //Khoi tao S; for (int i = 0; i < 256; i++) { s[i] = i; t[i] = Integer.parseInt(Character.toString(khoaK.charAt(i % khoaK.length()))); } //Hoan vi S int j = 0; for (int i = 0; i < 256; i++) { j = (j + s[i] + t[i]) % 256; int temp = s[i]; s[i] = s[j]; s[j] = temp; } } Trong giai đoạn này, trước tiên dãy S gồm số nguyên bít từ đến 255 thứ tự tăng dần Sau dựa phần tử khóa K, phần tử S hoán vị lẫn đến mức độ ngẫu nhiên • Giai đoạn sinh số: Code: public void SinhSo() { KhoiTao(); boSinhSo = ""; int i = 0; int j = 0; for (int o = 0; o < banRo.length(); o++) { i = (i + 1) % 256; j = (j + s[i]) % 256; int temp = s[i]; s[i] = s[j]; s[j] = temp; int T = (s[i] + s[j]) % 256; int k = s[T]; bss[o] = k; boSinhSo += Integer.toString(k); } } Trong giai đoạn này, phần tử S tiếp tục hoán vị Tại bước sinh số, hai phần tử dãy S chọn để tính số k bít số dùng để XOR với đơn vị mã hóa rõ 2) Đưa liệu vào giải mã 2.1) A5/1: Các đoạn văn, hay file thực chất tập hợp chuỗi bit xác định file Vì muốn đưa vào máy tính giải mã / mã hố, cần đưa liệu byte theo hệ nhị phân (binary) để máy tính thực lệnh so bit XOR Bước tiếp theo, ta tính độ dài chuỗi để tìm độ dài khố cần tìm Lưu ý : byte = bit nên byte biểu diễn đến 111111112 = 256 kí tự StringBuilder binary = new StringBuilder(); for (byte b : bytes) { int val = b; for (int i = 0; i < 8; i++) { binary.append((val & 128) == ? : 1); val