1. Trang chủ
  2. » Tất cả

Đề tài thuật toán của rc4

20 216 1

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 663,9 KB

Nội dung

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG *** BÁO CÁO MẬT MÃ HỌC CƠ SỞ Giảng Viên Cao Minh Thắng Chủ đề Mật mã dòng CR4 Mục lục 1 1 Mật mã dòng 3 1 1 1 Khái niệm 3 1 1 2 Đặc tính 3 1 1 2 1 Quá trình mã[.]

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG *** BÁO CÁO MẬT MÃ HỌC CƠ SỞ Mục lục Giảng Viên : Cao Minh Thắng Chủ đề : Mật mã dòng CR4 1.1 Mật mã dòng 1.1.1 Khái niệm 1.1.2 Đặc tính 1.1.2.1 Q trình mã hóa 1.1.2.2 Q trình giải mã 1.2 Cơ sở đời RC4 1.3 Thuật toán RC4 1.3.1 Tiny RC4 1.3.2 RC4 1.4 Ưu nhược điểm RC4 10 1.4.1 Ưu điểm 10 1.4.2 Nhược điểm 11 1.5 Demo 11 1.1 Mật mã dòng 1.1.1 Khái niệm Mật mã dịng loại mã hóa đối xứng đại thực mã hóa thơng tin dạng bit nhị phân Trong có khóa K vừa dùng để mã hóa vừa dùng để giải mã VD: thay mã hóa từ STUDY thành YSTDU ta biểu diễn ký tự dạng nhị phân theo bảng mã ASCII: \01010011\ 01010100\ 01000100\ 01011001\ tiến hành mã hóa 1.1.2 Đặc tính Mã dịng có đặc tính: ● Kích thước đơn vị mã hóa: gồm k bit Bản rõ chia thành đơn vị mã hóa: P -> p0 p p2 … p n−1 ( pi : k bit) ● Một sinh dãy số ngẫu nhiên: dùng khóa K ban đầu để sinh số ngẫu nhiên có kích thước kích thước đơn vị mã hóa: StreamCipher(K) -> S = s0 s … s n−1 ( si: k bit) ● Mỗi số ngẫu nhiên XOR với đơn vị mã hóa rõ để có mã c = p0 ⊕ s0 , c = p1 ⊕ s1 … ; C = c c … c n−1 − Quá trình giải mã thực ngược lại, mã C XOR với dãy số ngẫu nhiên S lại rõ ban đầu: p0 = c ⊕ s0 , p1 = c ⊕ s1 … 1.1.2.1 Q trình mã hóa ● Mã hóa: - Văn túy Dịng khóa tạo Văn mật mã (Dịng khóa tương tự sử dụng để giải mã) - Bản rõ trải qua hoạt động XOR với dịng khóa bit tạo Văn mật mã - VD: - Văn túy: 101100… - Keystream: 010110… - Văn mật mã: 111010… 1.1.2.2 Quá trình giải mã ● Giải mã: - Văn mật mã Dịng khóa cung cấp Văn ban đầu (Dịng khóa tương tự sử dụng để mã hóa) - Bản mã trải qua hoạt động XOR với Dịng khóa bit tạo Văn thực tế Vd: - Văn mật mã: 111010… - Keystream: 010110… - Văn túy: 101100 ▪ Mã dòng tương tự mã hóa Vigenere mã One-Time Pad Điểm quan trọng mã dòng sinh số ngẫu nhiên Bộ sinh số mã dịng cho phép dùng khóa ngắn dãy số sinh bảo đảm độ ngẫu nhiên cần thiết khóa One-time Pad, khơng hồn tồn thực ngẫu nhiên ▪ Một số thuật tốn mã hóa dịng phổ biến nay: A5/1, RC4 Ngồi cịn có ISAAC, MUGI, Panama, Phelix, Pike, SEAL Trong RC4 sử dụng rộng rãi tốc độ tính đơn giản 1.2 Cơ sở đời RC4 RC4 (Rivest Cipher 4) phương pháp mã hóa dịng với kích thước khóa khơng cố định, phát triển vào năm 1987 Ron Rivest cho RSA Security Mặc dù gọi thức "Rivest Cipher 4", từ viết tắt RC hiểu theo cách khác viết tắt "Ron Code" Ban đầu, RC4 bí mật thương mại vào tháng 9/1994 lan truyền mã phạm vi cơng cộng khơng cịn bí mật thương mại RC4 trở thành phần số giao thức tiêu chuẩn mã hóa thường sử dụng, chẳng hạn WEP năm 1997 WPA năm 2003/2004 cho thẻ không dây; SSL vào năm 1995 TLS kế nhiệm vào năm 1999, bị cấm tất phiên TLS RFC 7465 vào năm 2015, công RC4 làm suy yếu phá vỡ RC4 sử dụng SSL / TLS 1.3 Thuật toán RC4 RC4 tạo luông bit giả ngẫu nhiên (luồng khóa) Như với mật mã dịng nào, sử dụng để mã hóa cách kết hợp với rõ cách sử dụng phép toán thao tác bit XOR Việc giải mã thực theo cách (vì XOR phép tốn đối xứng) Để tạo dịng khóa, mật mã sử dụng trạng thái nội bí mật bao gồm phần: - Một hoán 256 byte có (Ký hiệu “S”) - Hai trỏ mục 8bit (kí hiệu “i” “j”) Hốn vị tạo khóa có độ dài thay đổi, thường từ 40 đến 2048 bit, sử dụng thuật tốn lập lịch khóa (KSA) Khi điều hoàn thành, luồng bit tạo cách sử dụng thuật toán tạo giả ngẫu nhiên (PRGA) 1.3.1 Tiny RC4 TinyRC4 dùng mảng S T mảng gồm số nguyên bit (từ đến 7) Khóa dãy gồm N số nguyên bit với N lấy giá trị từ đến Bộ sinh số lần sinh bit để sử dụng phép XOR Quá trình sinh số TinyRC4 gồm giai đoạn: a/ Giai đoạn khởi tạo: Trong giai đoạn này, trước tiên dãy S gồm số nguyên bit từ đến xếp theo thứ tự tang 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 Ví dụ: Mã hóa rõ P = 001000110 (từ “bag”) với khóa K gồm số 2, 1, (N=3) - Khởi tạo S T: - Hốn vị S: Q trình thực đến i=7 lúc dãy S b/ Giai đoạn sinh số: Trong giai đoạn này, trước tiên dãy 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 bit số dùng để XOR với đơn vị mã hóa rõ Tiếp tục ví dụ trên, q trình sinh số mã hóa rõ “bag” thực sau: Tiếp đến ta tiến hành XOR s0 s1 s2 với p0 p1 p2 để thu mã C Cụ thể: C = 001.000.110 XOR 101.001.111 = 100.001.001 (từ EBB) 1.3.2 RC4 Cơ chế hoạt động RC4 giống TinyRC4 với đặc tính sau: - Đơn vị mã hóa RC4 byte bit - Mảng S T gồm 256 số nguyên bit - Khóa K dãy gồm N số nguyên bit với N lấy giá trị từ đến 256 - Bộ sinh số lần sinh byte để sử dụng phép XOR Hai giai đoạn RC4 là: a/ Giai đoạn khởi tạo: b/ Giai đoạn sinh số: => Về cấu trúc giống hệt với TinyRC4 khác kích thước 1.4 Ưu nhược điểm RC4 1.4.1 Ưu điểm - Đơn giản, dễ sử dụng, không yêu cầu phức tạp phần cứng, không tiêu tốn nhiều nhớ => Đối với luồng liệu lớn RC4 lựa chọn ưu tiên - Thời gian tính tốn nhanh: mã hóa có kí tự xuất hiện, hồn tồ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 - Q trình sinh dãy số ngẫu nhiên, khó đốn trước đạt mức độ an tồn cao 1.4.2 Nhược điểm - Nếu MAC mạnh không sử dụng, RC4 dễ bị công bit-lật - RC4 không cung cấp xác thực, yêu cầu phải dung kênh an tồn để truyền khóa: chi phí cao việc thiết lập kênh an tồn khó khan - RC4 thực luồn liệu nhỏ - Việc tạo khóa bí mật khóa phức tạp, số lượng khóa cần tạo lưu trữ lớn - Nó đặc biệt dễ phát đầu streamkey không bị loại bỏ, khơng ngẫu nhiên hoạc phím có liên quan sử dụng - Khó khăn cơng việc xây dựng dịch vụ an toàn khác dịch vụ đảm bảo tính tồn vẹn liệu hay dịch vụ xác thực chữ kí số 1.5 Demo Source Code: import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Scanner; public class RC4Java { private static final int SBOX_LENGTH = 256; // private static final int KEY_MIN_LENGTH = 5; // //khoi tao mang byte co kich thuoc = 255 private byte[] key = new byte[SBOX_LENGTH - 1]; // khoi tao mang int sbox private int[] sbox = new int[SBOX_LENGTH]; public RC4Java() { reset(); } public RC4Java(String key) throws InvalidKeyException { this(); setKey(key); } private void reset() { Arrays.fill(key, (byte) 0); Arrays.fill(sbox, 0); } // funtion thuc hien ma hoa public byte[] encryptMessage(String message, Charset charset, String key) throws InvalidKeyException { reset(); setKey(key); byte[] crypt = crypt(message.getBytes()); reset(); return crypt; } public byte[] encryptMessage(String message, String key) throws InvalidKeyException { return encryptMessage(message, StandardCharsets.UTF_8, key); } // Funtion thuc hien giai ma public String decryptMessage(byte[] message, Charset charset, String key) throws InvalidKeyException { reset(); setKey(key); byte[] msg = crypt(message); reset(); return new String(msg); } /** Decrypt given byte[] message array with given key and pre-defined UTF-8 charset */ public String decryptMessage(byte[] message, String key) throws InvalidKeyException { return decryptMessage(message, StandardCharsets.UTF_8, key); } // Funtion thực sinh số public byte[] crypt(final byte[] msg) { sbox = initSBox(key); byte[] code = new byte[msg.length]; int i = 0; int j = 0; for (int n = 0; n < msg.length; n++) { i = (i + 1) % SBOX_LENGTH; j = (j + sbox[i]) % SBOX_LENGTH; swap(i, j, sbox); int rand = sbox[(sbox[i] + sbox[j]) % SBOX_LENGTH]; code[n] = (byte) (rand ^ msg[n]); } return code; } // Khởi tạo SBox hoán vị Sbox private int[] initSBox(byte[] key) { int[] sbox = new int[SBOX_LENGTH]; int j = 0; // khoi tao gia tri cua Sbox for (int i = 0; i < SBOX_LENGTH; i++) { sbox[i] = i; } // Khoi tao gia tri cua Key ( T[] ) tiến hành hoán vị for (int i = 0; i < SBOX_LENGTH; i++) { j = (j + sbox[i] + (key[i % key.length]) & 0xFF) % SBOX_LENGTH; swap(i, j, sbox); } return sbox; } private void swap(int i, int j, int[] sbox) { int temp = sbox[i]; sbox[i] = sbox[j]; sbox[j] = temp; } public void setKey(String key) throws InvalidKeyException { if (!(key.length() >= KEY_MIN_LENGTH && key.length() < SBOX_LENGTH)) { throw new InvalidKeyException("Key length has to be between " + KEY_MIN_LENGTH + " and " + (SBOX_LENGTH - 1)); } this.key = key.getBytes(); } } class Run { public static void main(String[] args) { RC4Java rc4 = new RC4Java(); Scanner sc = new Scanner(System.in); String text = sc.nextLine(); String key = sc.nextLine(); // // String text = "hello world!"; String key = "e4fawf"; byte[] encryptedMessage = rc4.encryptMessage(text, key); System.out.println(encryptedMessage); String decrypted = rc4.decryptMessage(encryptedMessage, key); System.out.println(decrypted); } } class InvalidKeyException extends RuntimeException { private static final long serialVersionUID = -2412232436238451574L; public InvalidKeyException(String message) { super(message); } } Giải thích: Đầu tiên tạo class RC4Java với khởi tạo giá trị SBOX_LENGTH hay theo giáo trì giá trị kích thước mảng S[] Tiếp đến khởi tạo giá trị tối thiểu khoá Tiếp đến ta tạo hàm swap đề đổi chỗ giá trị Hàm phục vụ cho việc hoán vị sinh số để tạo giá trị ngẫu nhiên Tiếp đến bước khởi tạo hoán vị theo giải thuật RC4 Khởi tạo funtion initSbox truyền vào khố người dùng nhập từ bàn phím Ở đoạn hốn vị khởi tạo giá trị j phải phép & 0xFF để đưa số int kiểu gi định dạng số hexan 8bit, tức để tạo thêm giá trị cho j đủ 8bit Tiếp theo bước sinh số mã hoá dùng phép XOR theo thuật toán RC4 - Khởi tạo funtion crypt để mã hố truyền vào giá trị cần mã hoá dạng byte - Trước hết tạo mảng code kiểu liệu byte để tiến hành lưu lại mã đơn vị mã hoá vào mảng dạng byte - Bước tạo giá trị rand giá trị k = S[t] giáo trình - Khi có giá trị khố k - Khi có giá trị rand ta tiến hành mã hố cách gán giá trị cho phần từ mảng code với phép xor (lưu ý phải ép kiểu dẽ liệu dạng byte) Chúng ta dùng hàm để tiến hành mã hố cách truyền vào rõ khoá gọi hàm thuật toán RC4 Tương tự ta có hàm giải mã để thực ngược lại hay nói cách khác thực lại phép xor lần để lấy lại rõ Tiếp đến cần tạo hàm main đề demo - Đầu tiên tạo đối tượng rc4 đối tượng scanner để lấy liệu từ bàn phím - Sau tạo mảng byte encryptedMessage để lấy mã cách truyền vào rõ text khố key - Sau tạo biến string decrypted để lưu giá trị giải mã vào in hình ⮚ Demo: - Dịng1: Truyền vào đoạn text : “Mat ma hoc co so” kiểu liệu string đóng vai trị rõ - Dịng 2: Nhập khố có kiểu liệu string : “Nhom 1” - Dịng 3: Bản mã sinh từ thuật tốn - Dòng 4: Bản mã sau giải mã khoá cho lại rõ ban đầu 1.6 Tài liệu tham khảo - http://www.ntu.edu.vn/Portals/7/HTTT/BaiGiangATBMTT.pdf - http://www.inf.ufsc.br/~bosco.sobral/ensino/ine5680/material-cripto-seg/2014-1/ Stallings/Stallings_Cryptography_and_Network_Security.pdf - https://drive.google.com/file/d/1HYDsGMaptMqO8j9nV1WoNOCAUDJx3Fm_/ view?usp=sharing - https://www.geeksforgeeks.org/rc4-encryption-algorithm/ ... 1.1.2.1 Q trình mã hóa 1.1.2.2 Quá trình giải mã 1.2 Cơ sở đời RC4 1.3 Thuật toán RC4 1.3.1 Tiny RC4 1.3.2 RC4 1.4 Ưu nhược điểm RC4 10 1.4.1 Ưu điểm 10 1.4.2 Nhược điểm 11 1.5 Demo 11 1.1 Mật... vào năm 1999, bị cấm tất phiên TLS RFC 7465 vào năm 2015, công RC4 làm suy yếu phá vỡ RC4 sử dụng SSL / TLS 1.3 Thuật toán RC4 RC4 tạo luông bit giả ngẫu nhiên (luồng khóa) Như với mật mã dịng... nhiên ▪ Một số thuật tốn mã hóa dịng phổ biến nay: A5/1, RC4 Ngồi cịn có ISAAC, MUGI, Panama, Phelix, Pike, SEAL Trong RC4 sử dụng rộng rãi tốc độ tính đơn giản 1.2 Cơ sở đời RC4 RC4 (Rivest Cipher

Ngày đăng: 24/02/2023, 12:17

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w