Thuật toán IDEA ( International Encryption Algorihm) được mô tả như sau
1 Hệ mật IDEA LỜI NÓI ĐẦU Vấn đề bảo mật thông tin hệ thống thông tin , tin học hoá, trở nên quan trọng , định đến thành cơng tính hữu hiệu hệ thống thông tin Để thực vấn đề người ta áp dụng nhiều biện pháp khác từ phương pháp thủ công với quy tắc , quy ước đến phương pháp đại có trợ giúp phương tiện tính tốn tiên tiến Trong năm gần đây, trước phát triển khoa học kỹ thuật cho đời nhiều thiết bị lưu trữ, thiết bị truyền thơng có chất lượng cao, đặc biệt phát triển nhanh vũ bão mạng lưới tin học mang tính tồn cầu hố Với lượng thơng tin lớn, liệu tập trung, tốc độ truyền tin cao việc bảo mật thơng tin trở nên khó khăn nhiều Trước tình hình nhiều tổ chức, cá nhân ngồi nước nói chung ngành yếu Việt Nam nói riêng quan tâm tới vấn đề Nhiều biện pháp kỹ thuật áp dụng chống tiếp cận, chép trái phép, bảo vệ thông tin đường truyền vv Để góp phần vào việc bảo đảm an tồn thơng tin Mục tiêu nghiên cứu đề tài em : “ Nghiên cứu, ứng dụng hệ mật IEDA vào bảo mật thông tin”.Đây thuật toán áp dụng phổ biến giới việc mã hoá liệu, theo đánh giá nhà phân tích chuyên mơn IDEA có khả nhân tố tốt tương lai việc mã hoá liệu Do thời gian làm đồ án có hạn trình độ chun mơn chưa nhiều nên khơng thể tránh số thiếu sót Vì em mong nhận góp ý thầy bạn để đề tài phát triển đưa vào ứng dụng thực tế Cuối em xin chân thành cảm ơn thầy giáo TS : Lều Đức Tân tận tình giúp đỡ em hồn thành đề tài Hà Nội ngày / /2000 Hệ mật IDEA MỤC LỤC CHƯƠNG I NÓI VỀ HỆ MẬT IDEA I Thuật toán IDEA I.1 Những điểm I.1.2 Các phép tốn sử dụng IDEA I.1.3 Mã hoá giải mã IDEA a Mã hoá b Giải mã I.1.4 Quá trình làm việc modul CHƯƠNG II MỘT SỐ ĐOẠN CHƯƠNG TRÌNH VÍ DỤ II.1 Nhân số modulo(216+1) II.2 Tính số nhân đảo số x modulo 65537 II.3 Tạo 52 khối subkey từ khố 128 bit II.4 Tính khố cho q trình giải mã II.5 Chương trình mã CHƯƠNG III THIẾT KẾ CHƯƠNG TRÌNH MÃ DỊCH BẰNG HỆ MẬT IDEA III Mục đích thiết kế III.1 Mục đích III.2 Cách thực mã hoá giải mã theo IDEA III.3 Các chức phần mềm III.4 Chương trình mơ tả thuật toán IDEA Hệ mật IDEA CHƯƠNG I NĨI VỀ HỆ MẬT IDEA I Thuật tốn IDEA Thuật tốn IDEA ( International Encryption Algorihm) mơ tả sau: I.1 Những điểm chính: IDEA phương pháp mã khối sử dụng 128 bit khoá để mã khối liệu 64 bit IDEA xây dựng nhằm mục đích kết hợp với nhiều yếu tố khác để tăng độ an toàn khả thực Từ cơng bố thuật tồn đối tượng quan tâm nhà phân tích mật mã(mã thám), khơng đảm bảo mức độ chắn, an tồn thuật tốn cung cấp khơng bảo đảm việc công hay đột phá vào thuật tốn khơng thể thành cơng Một ngày đó, cho dù có đột phá người ta không công bố Tuy nhiên, với điều kiện kỹ thuật điếu khó xảy Độ an tồn: -Độ an tồn khối: khối phải có độ dài đủ để chống lại phương pháp phân tích thống kê ngăn việc số khối xuất nhiều khối khác Mặt khác phức tạp thuật toán tăng theo hàm mũ với độ dài khối Với khối có độ dài 64 bit đủ độ an tồn -Độ dài khố: Khố phải có độ dài đủ để chống lại phương pháp vét cạn khoá ( Chống khả thử khoá sinh từ (N)bit khoá cho trước ) - Độ phức tạp: Bản mã phải phụ thuộc cách phức tạp vào rõ khoá Mục tiêu đặt phải phức tạp hoá phụ thuộc mặt thống kê mã vào rõ IDEA đạt diều nhờ sử dụng phép toán trình bày sau đây: Hệ mật IDEA - Sự phân bố: IDEA đạt việc bít rõ phải có ảnh hưởng tới nhiều bit mã bit khoá tác động đến nhiều bit mã Điều làm cho cấu trúc rõ bị phá vỡ mã I.2 Các phép toán sử dụng IDEA Trong thuật tốn IDEA gồm có thuật tốn sau: - Phép XOR theo bit Kí hiệu ⊕ - Phép cộng số nguyên lấy modulo 216 (65536)với đầu vào đầu số nguyên không dấu 16 bit Kí hiệu - Phép nhân hai số nguyên lấy modulo 216 +1 với đầu vào đầu số nguyên không dấu 16 bit Quy ước khối toàn số biểu thị cho 216 Kí hiệu ⊗ Cả ba phép tốn phải thoả mãn tính chất sau: - Khơng có phép tốn thoả mãn luật phân phối : a (b ⊗ c ) ≠ (a b ) ⊗ ( a c) - Không có phép tốn thoả mãn luật kết hợp : a (b ⊗ c ) ≠ (a b ) ⊗ c Việc sử dụng phép toán tạo biến đổi phức tạp liệu đầu vào làm cho việc mã thám trở nên khó khăn so với việc sử dụng phép toán đơn giản Trong IDEA phân bố tạo dựa khối thuật tốn có cấu trúc hình vẽ gọi cấu trúc MA( Multiplication/Additio) hình sau: Hệ mật IDEA F1 F2 ⊗ Z5 G1 ⊗ Z6 G2 Hình 1: Cấu trúc Multiplication/Additio (MA) Khối nhận 16 bit từ rõ 16 bit lấy từ khoá theo quy tắc ( 16 bit gọi subkey quy tắc lấy subkey từ khoá trình bày sau)để tạo 16 bit đầu Một chương trình kiểm tra máy tính phương pháp vét cạn xác định bit đầu phụ thuộc vào bít rõ bit subkey đầu vào Cấu trúc sử dụng lặp lại lần thuật toán tạo nên phân bố có hiệu qủa IDEA xây dựng cho việc thực dễ dàng phần cứng phần mềm Việc thực phần cứng, điển hình vi mạch VLSI (VLSI: mạch tích hợp cao) , thiết kế để đạt tốc độ cao Việc xây dựng phần mềm thuận tiện giá thành thấp Hệ mật IDEA Những điểm chủ yếu việc xây dựng phần mềm: + Sử dụng khối nhỏ : phép mã thực khối có độ dài 8,16,32 bit phù hợp với việc xử lý máy tính + Sử dụng thuật tốn giản đơn :Phép tốn mã dễ dàng lập ttình phép cộng , phép dịch chuyển (shift), , Cả phép toán IDEA thoả mãn yêu cầu Điểm khó khăn phép tốn nhân modulo(2 16 +1) dễ dàng xây dựng từ phép tốn sẵn có - Những điểm chủ yếu việc thực phần cứng: + Sự tương tự mã hoá giải mã : Mã hoá giải mã nên khác việc sử dụng khố nhờ phương tiện dùng cho mã hoá giải mã + Cấu trúc lặp lại : Phương pháp mã nên có cấu trúc modul lặp lại để mạch VLSI thực dễ dàng IDEA xây dựng từ khối modulo đơn giản sử dụng lặp lại nhiều lần I.1.3 Mã hoá giải mã IDEA: a Mã hoá: Giống sơ đồ mã hoá khác, hàm mã hố có tham số đầu vào Bản rõ cần mã khoá Trong trường hợp 64 bit rõ 128 bit khoá Từ đầu vào đến đầu ra, bit rõ qua modul hàm biến đổi cuối Tám modul có cấu trúc giống thực thao tác với liệu đầu vào Mỗi modul nhận khối 16 bit rõ đầu vào với subkey đưa khối 16 bit mã hoá Do 64 bit rõ chia thành khối nhỏ gọi subblock, subblock 16 bit Cùng với subblock khối subkey đưa vào modul Như Hệ mật IDEA thêm subkey cần thiết cho hàm biến đổi cuối cùng, ta cần tổng cộng 52 khối subkey cho lần 64 bit rõ 128 bit khoá Z X1 X2 X3 X4 Modul Tạo W11 W12 W13 W14 Modul W21 W22 W23 W24 Subkey từ khoá 16 16 Z1 Z52 W71 W72 W73 W74 Modul W81 W82 W83 W84 Hàm biến đổi 64 bit mã Hình 2: Cấu trúc IDEA Như nói trên, modul có cấu trúc giống khác liệu đầu vào Trừ modul nhận 64 bit rõ đưa từ vào, modul đứng sau nhận khối subblock 16 bit đầu modul đứng trước làm bit rõ đầu vào Trong trình modul kết hợp subblock với subkey phép toán ⊗ Bốn khối đầu trình XOR với sơ đồ để tạo khối đầu vào cho cấu trúc MA kết hợp chúng với subkey lại để tạo khối 16 bit Hệ mật IDEA Cuối cùng, khối tạo từ trình XOR với khối đầu cấu trúc MA để tạo khối đầu modul Ta cần ý điều khối đầu vào X X3 hoán đổi cho để tạo khối W12 W13 đưa Điều làm tăng hoà trộn bit xử lý tăng khả chống lại phương pháp mã thám X1 X2 X3 X4 Z1 ⊗ Z2 ⊗ ⊗ Z4 ⊗ ⊗ Z5 Z3 Z6 ⊗ ⊕ W11 ⊕ W12 ⊕ ⊕ W13 W14 Hình 3: Cấu trúc modul (Modul 1) Hàm biến cuối ta coi modul thứ Hàm có cấu trúc giống cấu trúc thực trình modul khác điều khối thứ thứ đầu vào đổi chỗ cho trước đưa tới đơn vị phép toán Thực việc trả lại thứ tự bị đổi sau modul thứ Lý việc giống cấu trúc trình giải mã trình mã hố Hệ mật IDEA Z49 Z50 ⊗ Z51 ⊗ Y1 Y2 Y3 Z52 Y4 Hình 4: Hàm biến đổi IDEA * Quy tắc tạo subkey: Như trình bày, cần thiết phải có 52 khối subkey 16 bit tạo từ 128 bit khoá Quy tắc tạo subkey sau: - subkey , Z1 Z8, lấy trực tiếp từ khoá với X1 16 bit đầu ( Bit có trọng số cao ), Z2 16 bit tiếp tục - Sau khố quay trái 25 bit subkey tạo theo quy tắc Thao tác lặp lại có đủ 52 khối subkey Quy tắc phương pháp hiệu cho việc đa dạng hoá bit khoá dùng cho modul Ta nhận thấy subkey dùng modul sử dụng tập hợp bit khác khoá Nếu khoá 128 bit ký hiệu Z[ 128] subkey modul : Z1 = Z[ 16] Z 25 = Z[76 91] Z7 = Z[97 112] Z 31 = Z[44 59] Z13 = Z[90 105] Z 37 = Z[37 52] Z19 = Z[83 98] Z43 = Z[30 45] Như , 96 bit subkey sử dụng cho modul , trừ modul thứ modul thứ 8, không liên tục Do khơng có mối liên hệ dịch chuyển đơn 10 Hệ mật IDEA giản subkey của modul modul với Nguyên nhân có kết việc có khối subkey sử dụng có khối subkeyđược tạo lần dịch chuyển khoá b Giải mã : Quá trình giải mã giống q trình mã hố, giải mã nhận mã đầu vào qua cấu trúc trên, khác lựa chọn subkey Các subkey để giải mã U1, U2, U52 nhận từ khoá mã theo quy tắc sau: Modul8 { { Modul2 { { Modul1 Modul8 Modul2 Modul1 Đối với modul giải mã i ta lấy subkey đầu modul mã hóa thứ (10 - i ), hàm biến đổi coi modul thứ Sau lấy nhân đảo modulo (216+1) subkey thứ thứ để dùng cho subkey giải mã thứ thứ tương ứng Đối với modul từ thứ đến thứ 8, subkey giải mã thứ thứ cộng đảo modulo216 subkey thứ thứ tương ứng Đối với modul thứ thứ , cho subkey giải mã thứ thứ cộng đảo modul2 16 subkey thứ thứ tương ứng X1 X2 X3 X X1 X X3 X4 -Đối với2 modul , subkey cuối modul i subkey cuối modul mã hoá thứ ( - i ) U U Z1 Z4 U491 U4 Biến đổi Biến đổi đầu 52 -1 nhân đảo Zj I Zj là: I11 I12 I14 V81 V82 V83 V84 13 -1 Zj ⊗ Zhoá U47 U48 Z5 Z6 Mã j =1 Mã hố 16 16 Vì + số nguyên tố nên số nguyên J j < J có số nhân đảo Z J W11 W12 W13 W14 J84 81 82 83 16 modulo(2 + Biến đổi 1) Z7 Z10 U43 U46 Biến đổi 16 Với cộng đảo hai modullo ta có: I21 I22 I23 I24 -Z j Zj = V71 V72 V73 V74 Z11 Z12 Mã hố Hình sau q trình mã hố ( theo chiều xuống bên trái) trình W21 W W23 W24 giải mã ( chiều 22 bên phải) thuật toán IDEA lên V21 V22 V23 V24 U11 U12 Biến đổi W71 W72 W73 W74 J21 J22 J23 J24 Z42 Z46 Biến đổi U1 U10 Z1 Z4 Mã hoá I81 I82 I83 I84 V11 V12 V13 V14 Z47 Z48 Mã hoá U5 U6 Biến đổi W81 W82 W83 W84 J11 J12 J13 J14 Z49 Z52 Biến đổi đầu U1 U4 Mã hoá Y1 Y2 Y3 Y4 { { Y4 Y4 Y4 Y4 Hệ mật IDEA 28 memcpy(&buffer_le, buffer, 8-i ); fread(&(Buffer _le)+8-i, i, 1,file_ro); IDEA(buffer_le); Fwrite(buffer_le, 8,1,file_ma); } Qua đoạn trình thấy sau mã hố buffer thứ j < n0-1 ta ghi tồn buffer mã vào file_ma buffer thứ j =n – (tính từ 0) sau mã hố ta ghi vào file_ma i byte buffer mã 8- i byte chưa ghi dùng để tạo buffer_le với i byte lẻ file_ro Cuối ta ghi nốt buffer mã buffer_le vào file_ma Quá trình dịch thực theo trình tự ngược lại buffer tiêu chuẩn cuối buffer_le Cụ thể sau đọc từ file_ma dịch n 0-1 buffer đầu ghi vào file_dịch ta đọc byte file_ma dịch dùng –i byet cuối buffer dịch ghép với i byte áp byte cuối file_ma tạo buffer_le Dịch buffer_le ghi vào file_dịch , cuối ghi nốt i byte cuối buffer dịch trước vào file_dịch Dễ dàng nhận file_dịch file_ro trùng III.3 Các chức phần mềm: Do điều kiện thời gian viết phần mềm trực tiếp ngôn ngữ Boland-C tương ứng thiết kế giao diện Text Phần mềm có hai chức mã hố giải mã Khi thực chức mã hoá cần thực thủ tục chọn tên file cần mã (file_ro) đặt tên cho file mã hố (file_ma) Q trình chọn khoá dùng để mã hoá file thực tự động hàm Random C Hệ mật IDEA 29 Ngược lại việc thực chức giải mã(dịch) cần thực thủ tục chọn tên file cần dịch (file_ma) đặt tên cho file sau dịch (file_dịch) Chú ý cuối cùng: Phần mềm viết mô cho cách dùng cụ thể hệ mật IDEA dùng để bảo mật thơng tin dạng file (có thể dùng để lưu trữ truyền cho người khác ) Để sản phẩm hồn chỉnh cần phải hồn thiện nhiều đặc biệt cần có bổ xung q trình phân phối khố tự động sau đến q trình xác thực chữ ký số mà công cụ phù hợp với chức hệ mật khố cơng khai nói III.4 Chương trình mơ tả thuật toán IDEA /* Chuong trinh ma dich file bang he mat IDEA*/ #include #include #include #include #include #include #include typedef unsigned char BYTE; typedef unsigned int WORD; typedef unsigned long LONG; #define IDEA_max 0x10001 /* Dinh nghia gia tri x*y modulo 2^16+1 truong hop x>0 va y>0 */ #define IDEA_tich(x,y) ((x*y)%IDEA_max) #define do_dai_buff 0x8000 BYTE Buff[do_dai_buff]; WORD Block_vao[4],IDEA_khoa[52],IDEA_mam[8]; /* Ham tinh tich x*y (modulo 65537) */ Hệ mật IDEA WORD IDEA_nhan(WORD x,WORD y) {if ((x==0)&&(y==0)) return 1; else {if (x==0) return (WORD) (IDEA_max-y); else if (y==0) return (WORD) (IDEA_max-x); else { LONG u=x,v=y; return (WORD) IDEA_tich(u,v); } } } /* Ham tinh x=nghich dao cua x (modulo 65537) */ WORD IDEA_nghich_dao(WORD x) { if (x1) { q[i]=a/r; b=r; r=a%r; a=b; i++; } WORD s=1,t;r=0; for (int j=i-1;j>=0;j ) 30 Hệ mật IDEA { t=s; t*=q[j]; t+=r; r=s; s=t; } if (i&1) { a=IDEA_max-t; t=a; } return t; } } /* Thu tuc lay word thu k tep "IDEA.key" lam mam khoa (IDEA_mam) */ char IDEA_lay_khoa(short k) { char b; FILE *f; f=fopen("IDEA.key","rb"); long l=filelength(fileno(f)),m=16; m*=k; if (l4; for (char j=0;j>db)^(IDEA_mam[(j+dw+1)&7]db)^(IDEA_mam[(j+dw+1)&7]