Đồ án Nghiên cứu ứng dụng của hệ mật IEDA vào bảo mật thông tin

IDEA là phương pháp mã khối sử dụng 128 bit khoá để mã khối dữ liệu 64 bit. IDEA được 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 và khả năng thực hiện. Từ khi mới được công bố thì thuật toàn này đều là đối tượng quan tâm của các nhà phân tích mật mã(mã thám), và không ai có thể đảm bảo được mức độ chắc chắn, sự an toàn của thuật toán này cung cấp và cũng không ai có thể bảo đảm rằng việc tấn công hay đột phá vào thuật toán này là không thể thành công. Một ngày nào đó, cho dù có đột phá được thì người ta cũng không hề công bố. Tuy nhiên, với điều kiện kỹ thuật như hiện nay thì điếu đó vẫn khó có thể xảy ra. Độ an toàn: -Độ an toàn của khối: khối phải có độ dài đủ để chống lại các phương pháp phân tích thống kê và ngăn việc một số khối nào đó xuất hiện nhiều hơn các khối khác. Mặt khác sự phức tạp của 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 là đủ độ an toàn. -Độ dài khoá: Khoá phải có độ dài đủ để chống lại các phương pháp vét cạn khoá ( Chống khả năng thử các khoá được sinh ra từ (N)bit khoá cho trước ). - Độ phức tạp: Bản mã phải phụ thuộc một cách phức tạp vào bản rõ và khoá. Mục tiêu đặt ra ở đây là phải phức tạp hoá sự phụ thuộc của bộ mặt thống kê của bản mã vào bản rõ. IDEA đạt được diều này nhờ sử dụng 3 phép toán sẽ trình bày sau đây: - Sự phân bố: IDEA đã đạt được việc mỗi bít của bản rõ phải có ảnh hưởng tới nhiều bit của bản mã và mỗi bit khoá cũng tác động đến nhiều bit của bản mã. Điều này làm cho cấu trúc của bản rõ sẽ bị phá vỡ trong bản mã.

doc43 trang | Chia sẻ: tuandn | Lượt xem: 2587 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Đồ án Nghiên cứu ứng dụng của hệ mật IEDA vào bảo mật thông tin, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU Vấn đề bảo mật thông tin trong các hệ thống thông tin , tin học hoá, đã trở nên hết sức quan trọng , nó quyết định đến sự thành công và tính hữu hiệu của các hệ thống thông tin. Để thực hiện vấn đề này người ta áp dụng rất nhiều các biện pháp khác nhau từ những phương pháp thủ công với các quy tắc , quy ước đến những phương pháp hiện đại có sự trợ giúp của các phương tiện tính toán tiên tiến nhất. Trong mấy năm gần đây, trước sự phát triển của khoa học kỹ thuật đã cho ra đờ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 là sự phát triển nhanh như vũ bão của mạng lưới tin học đã và đang mang tính toàn cầu hoá. Với lượng thông tin lớn, dữ liệu tập trung, tốc độ truyền tin cao vì vậy việc bảo mật thông tin đã trở nên khó khăn hơn nhiều. Trước tình hình đó nhiều tổ chức, cá nhân trong và ngoài nước nói chung và ngành cơ yếu Việt Nam nói riêng đã rất quan tâm tới vấn đề này. Nhiều các biện pháp kỹ thuật được áp dụng như chống tiếp cận, sao chép trái phép, bảo vệ thông tin trên đường truyền ..vv. Để góp phần vào việc bảo đảm an toàn thông tin. Mục tiêu nghiên cứu đề tài này của em là : “ Nghiên cứu, ứng dụng của hệ mật IEDA vào bảo mật thông tin”.Đây là thuật toán mới và đang được áp dụng phổ biến trên thế giới trong việc mã hoá dữ liệu, theo đánh giá của các nhà phân tích chuyên môn thì IDEA có khả năng sẽ là một nhân tố tốt trong tương lai về việc mã hoá dữ liệu. Do thời gian làm đồ án có hạn và trình độ chuyên môn chưa nhiều nên không thể tránh được một số thiếu sót. Vì vậy em rất mong nhận được sự góp ý của các thầy và các bạn để đề tài này có thể phát triển và được đưa vào ứng dụng trong thực tế. Cuối cùng 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 hoàn thành đề tài này. Hà Nội ngày .../.../2000. MỤC LỤC CHƯƠNG I. NÓI VỀ HỆ MẬT IDEA Thuật toán IDEA I.1. Những điểm chính I.1.2. Các phép toán sử dụng trong IDEA I.1.3. Mã hoá và giải mã trong IDEA Mã hoá Giải mã I.1.4 Quá trình làm việc của một modul CHƯƠNG II. MỘT SỐ ĐOẠN CHƯƠNG TRÌNH VÍ DỤ II.1. Nhân 2 số modulo(216+1) II.2. Tính số nhân đảo của số x modulo 65537 II.3. Tạo 52 khối subkey từ khoá 128 bit II.4. Tính khoá cho quá 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 và thiết kế III.1. Mục đích III.2. Cách thực hiện mã hoá và giải mã theo IDEA III.3. Các chức năng của phần mềm III.4. Chương trình mô tả của thuật toán IDEA CHƯƠNG I. NÓI VỀ HỆ MẬT IDEA I. Thuật toán IDEA Thuật toán IDEA ( International Encryption Algorihm) được mô tả như sau: I.1 . Những điểm chính: IDEA là phương pháp mã khối sử dụng 128 bit khoá để mã khối dữ liệu 64 bit. IDEA được 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 và khả năng thực hiện. Từ khi mới được công bố thì thuật toàn này đều là đối tượng quan tâm của các nhà phân tích mật mã(mã thám), và không ai có thể đảm bảo được mức độ chắc chắn, sự an toàn của thuật toán này cung cấp và cũng không ai có thể bảo đảm rằng việc tấn công hay đột phá vào thuật toán này là không thể thành công. Một ngày nào đó, cho dù có đột phá được thì người ta cũng không hề công bố. Tuy nhiên, với điều kiện kỹ thuật như hiện nay thì điếu đó vẫn khó có thể xảy ra. Độ an toàn: -Độ an toàn của khối: khối phải có độ dài đủ để chống lại các phương pháp phân tích thống kê và ngăn việc một số khối nào đó xuất hiện nhiều hơn các khối khác. Mặt khác sự phức tạp của 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 là đủ độ an toàn. -Độ dài khoá: Khoá phải có độ dài đủ để chống lại các phương pháp vét cạn khoá ( Chống khả năng thử các khoá được sinh ra từ (N)bit khoá cho trước ). - Độ phức tạp: Bản mã phải phụ thuộc một cách phức tạp vào bản rõ và khoá. Mục tiêu đặt ra ở đây là phải phức tạp hoá sự phụ thuộc của bộ mặt thống kê của bản mã vào bản rõ. IDEA đạt được diều này nhờ sử dụng 3 phép toán sẽ trình bày sau đây: - Sự phân bố: IDEA đã đạt được việc mỗi bít của bản rõ phải có ảnh hưởng tới nhiều bit của bản mã và mỗi bit khoá cũng tác động đến nhiều bit của bản mã. Điều này làm cho cấu trúc của bản rõ sẽ bị phá vỡ trong bản mã. I.2. Các phép toán sử dụng trong IDEA Trong thuật toán IDEA gồm có 3 thuật toán sau: - Phép XOR theo bit. Kí hiệu là Å - Phép cộng 2 số nguyên lấy modulo 216 (65536)với đầu vào và các đầu ra là các số nguyên không dấu 16 bit. Kí hiệu là U . - Phép nhân hai số nguyên lấy modulo 216 +1 với đầu vào và đầu ra là các số nguyên không dấu 16 bit. Quy ước là khối toàn số 0 biểu thị cho 216 . Kí hiệu Ä. Cả ba phép toán này đều phải thoả mãn các tính chất sau: - Không có 2 phép toán nào thoả mãn luật phân phối : a U (b Ä c ) ¹ (a U b ) Ä ( a U c) - Không có 2 phép toán nào thoả mãn luật kết hợp : a U (b Ä c ) ¹ (a U b ) Ä c Việc sử dụng 3 phép toán này tạo ra một sự biến đổi phức tạp dữ liệu đầu vào làm cho việc mã thám trở nên khó khăn hơn so với việc chỉ sử dụng một phép toán đơn giản. Trong IDEA sự phân bố được tạo ra dựa trên khối thuật toán có cấu trúc như hình vẽ gọi là cấu trúc MA( Multiplication/Additio) trong hình sau: Ä Ä U U F1 F2 Z5 Z6 G1 G2 Hình 1: Cấu trúc Multiplication/Additio (MA) Khối này nhận 16 bit từ bản rõ và 16 bit được lấy từ khoá ra theo một quy tắc nào đó ( 16 bit này được gọi là subkey và quy tắc lấy subkey từ khoá sẽ được trình bày ở sau)để tạo ra 16 bit đầu ra. Một chương trình kiểm tra trên máy tính bằng phương pháp vét cạn xác định rằng mỗi bit ở đầu ra phụ thuộc vào các bít rõ và bit subkey đầu vào. Cấu trúc này được sử dụng lặp lại 8 lần trong thuật toán và tạo nên một sự phân bố có hiệu qủa. IDEA được xây dựng sao cho việc thực hiện nó được dễ dàng cả trên phần cứng và phần mềm . Việc thực hiện trên phần cứng, điển hình là trên vi mạch VLSI (VLSI: mạch tích hợp cao) , được thiết kế để đạt được tốc độ cao. Việc xây dựng trên phần mềm thì thuận tiện và giá thành thấp. Những điểm chủ yếu trong việc xây dựng phần mềm: + Sử dụng những khối nhỏ : những phép mã thực hiện trên những khối có độ dài 8,16,32 bit phù hợp với việc xử lý trên máy tính. + Sử dụng thuật toán giản đơn :Phép toán mã dễ dàng trong lập ttình như phép cộng , phép dịch chuyển (shift),..., Cả 3 phép toán của IDEA đều thoả mãn những yêu cầu này. Điểm khó khăn nhất là phép toán nhân modulo(216 +1) cũng có thể dễ dàng xây dựng từ những phép toán sẵn có . - Những điểm chủ yếu trong việc thực hiện trên phần cứng: + Sự tương tự trong mã hoá và giải mã : Mã hoá và giải mã chỉ nên khác nhau trong việc sử dụng khoá và nhờ đó một phương tiện có thể dùng cho cả mã hoá và 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 để các mạch VLSI có thể thực hiện được dễ dàng. IDEA được xây dựng từ 2 khối modulo đơn giản và sử dụng lặp lại nhiều lần. I.1.3 Mã hoá và giải mã trong IDEA: Mã hoá: Giống như các sơ đồ mã hoá khác, hàm mã hoá có 2 tham số ở đầu vào là Bản rõ cần mã và khoá. Trong trường hợp này là 64 bit rõ là 128 bit khoá . Từ đầu vào đến đầu ra, các bit rõ lần lượt đi qua 8 modul và một hàm biến đổi cuối cùng. Tám modul này có cấu trúc giống nhau và thực hiện các thao tác như nhau với dữ liệu đầu vào. Mỗi modul nhận 4 khối 16 bit rõ ở đầu vào cùng với các subkey và đưa ra 4 khối 16 bit đã được mã hoá. Do đó 64 bit rõ sẽ được chia thành 4 khối nhỏ gọi là các subblock, mỗi subblock là 16 bit. Cùng với các subblock này là 6 khối subkey cũng sẽ được đưa vào từng modul. Như vậy thêm 4 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 một lần 64 bit rõ X1 X2 X3 X4 W11 W12 W13 W14 Modul 2 W21 W221 W23 W24 W71 W72 W73 W74 W81 W82 W83 W84 Modul 8 Hàm biến đổi Z1 Z52 Modul 1 Tạo Subkey từ khoá 128 bit khoá Z 16 ....................16 64 bit mã Hình 2: Cấu trúc IDEA Như đã nói ở trên, các modul có cấu trúc giống nhau và chỉ khác nhau ở dữ liệu đầu vào. Trừ modul đầu tiên nhận 64 bit rõ đưa từ ngoài vào, các modul đứng sau sẽ nhận 4 khối subblock 16 bit đầu ra của modul đứng trước nó làm các bit rõ đầu vào. Trong quá trình đầu tiên các modul kết hợp 4 subblock với 4 subkey bằng các phép toán U và Ä. Bốn khối đầu ra của quá trình này XOR với nhau như trong sơ đồ để tạo ra 2 khối đầu vào cho cấu trúc MA sẽ kết hợp chúng với 2 subkey còn lại để tạo ra 2 khối 16 bit mới. Cuối cùng, 4 khối được tạo ra từ quá trình đầu tiên sẽ được XOR với 2 khối đầu ra của cấu trúc MA để tạo ra 4 khối đầu ra của modul. Ta cũng cần chú ý một điều là 2 khối đầu vào X2 và X3 được hoán đổi cho nhau để tạo ra 2 khối W12 và W13 được đưa ra ngoài. Điều này làm tăng sự hoà trộn của các bit được xử lý và tăng khả năng chống lại các phương pháp mã thám. X1 X2 X3 X4 Hình 3: Cấu trúc một modul (Modul 1) Ä Ä Ä U Ä U Ä Å Å Å U Ä U U Å W11 W12 W13 W14 Z6 Z5 Z3 Z4 Z1 Z2 Hàm biến ở cuối cùng ta cũng có thể coi như một modul thứ 9. Hàm này có cấu trúc giống như cấu trúc đã thực hiện trong quá trình đầu tiên của một modul chỉ khác một điều là khối thứ 2 và thứ 3 ở đầu vào được đổi chỗ cho nhau trước khi được đưa tới đơn vị phép toán. Thực ra đây chỉ là việc trả lại thứ tự đã bị đổi sau modul thứ 8. Lý do của việc này là sự giống nhau về cấu trúc của quá trình giải mã và quá trình mã hoá. Ä Ä U U Z51 Z49 Z52 Z50 Y1 Y2 Y3 Y4 Hình 4: Hàm biến đổi của IDEA * Quy tắc tạo ra subkey: Như trên đã trình bày, cần thiết phải có 52 khối subkey 16 bit được tạo ra từ 128 bit khoá. Quy tắc tạo subkey như sau: 8 subkey đầu tiên , Z1...Z8, được lấy trực tiếp từ khoá với X1 là 16 bit đầu ( Bit có trọng số cao nhất ), Z2 là 16 bit tiếp theo và cứ tiếp tục như vậy - Sau đó khoá được quay trái 25 bit và 8 subkey tiếp theo được tạo ra theo quy tắc trên. Thao tác này được lặp lại cho đến khi có đủ 52 khối subkey. Quy tắc này là một phương pháp hiệu quả cho việc đa dạng hoá các bit khoá dùng cho các modul. Ta nhận thấy rằng những subkey đầu tiên dùng trong mỗi modul sử dụng những tập hợp bit khác nhau của khoá. Nếu như khoá 128 bit được ký hiệu là Z[ 1..128] thì subkey đầu tiên của modul sẽ là : Z1 = Z[ 1..16] Z25 = Z[76..91] Z7 = Z[97..112] Z31 = Z[44..59] Z13 = Z[90..105] Z37 = Z[37..52] Z19 = Z[83..98] Z43 = Z[30..45] Như vậy , 96 bit subkey sử dụng cho mỗi modul , trừ modul thứ nhất và modul thứ 8, là không liên tục. Do đó không có một mối liên hệ dịch chuyển đơn giản nào giữa các subkey của của một modul và giữa các modul với nhau. Nguyên nhân có được kết quả này là việc chỉ có 6 khối subkey được sử dụng trong khi có 8 khối subkeyđược tạo ra trong mỗi lần dịch chuyển khoá. Giải mã : Quá trình giải mã về cơ bản giống quá trình mã hoá, giải mã nhận bản mã ở đầu vào và cùng đi qua những cấu trúc như ở trên, chỉ khác ở sự lựa chọn các subkey. Các subkey để giải mã U1, U2,...U52 nhận được từ khoá mã theo quy tắc sau: Đối với modul giải mã i ta lấy 4 subkey đầu của modul mã hóa thứ (10 - i ), ở đây hàm biến đổi được coi như modul thứ 9. Sau đó lấy nhân đảo modulo (216+1) của subkey thứ 1 và thứ 4 để dùng cho subkey giải mã thứ 1 và thứ 4 tương ứng. Đối với các modul từ thứ 2 đến thứ 8, subkey giải mã thứ 2 và thứ 3 là cộng đảo modulo216 của subkey thứ 3 và thứ 2 tương ứng. Đối với các modul thứ 1 và thứ 9 , cho subkey giải mã thứ 2 và thứ 3 là cộng đảo modul216 của subkey thứ 3 và thứ 2 tương ứng. -Đối với 8 modul đầu tiên , 2 subkey cuối cùng của modul i là 2 subkey cuối cùng của modul mã hoá thứ ( 9 - i ). ở đây nhân đảo Zj-1 của Zj là: Zj Ä Zj-1 =1 Vì 216 + 1 là một số nguyên tố nên mỗi số nguyên Zj < 216 có một số nhân đảo modulo(216 + 1) duy nhất. Với cộng đảo hai modullo 216 ta có: -Zj U Zj = 0 Hình sau hiện quá trình mã hoá ( theo chiều đi xuống bên trái) và quá trình giải mã ( chiều đi lên bên phải) của thuật toán IDEA. X1 X2 X3 X4 Biến đổi I11 I12 I13 I14 Mã hoá W11 W12 W13 W14 Biến đổi I21 I22 I23 I24 Mã hoá W21 W22 W23 W24 W71 W72 W73 W74 Mã hoá I81 I82 I83 I84 W81 W82 W83 W84 Biến đổi đầu ra Y1 Y2 Y4 Y4 Y4 Y4 Y4 Y3 Biến đổi X1 X2 X3 X4 Biến đổi đầu ra Mã hoá V81 V82 V83 V84 Biến đổi J14 J13 J12 J11 J24 J23 J22 J21 J81 J82 J83 J84 V71 V72 V73 V74 Biến đổi Biến đổi V24 V23 V22 V21 V71 V14 V13 V12 V11 V21 Mã hoá Mã hoá Modul1 Modul2 Modul8 Modul8 Modul2 Modul1 Z1..Z4 Z5..Z6 Z11..Z12 Z7..Z10 Z1..Z4 Z42..Z46 Z47..Z48 Z49..Z52 Z5..Z6 U1..U4 U5..U6 U1..U10 U11..U12 U43..U46 U47..U48 U1..U4 U49..U52 Hình 5: Mã hoá và giải mã trong IDEA. Mỗi modul được chia thành 2 khối nhỏ: khối biến đổi và khối mã hoá. Khối biến đổi tương ứng với quá trình đầu tiên trong mỗi modul, còn khối mã hoá tương ứng với các quá trình còn lại. Ở phía cuối của sơ đồ, bên mã hoá ta nhận được các mối quan hệ giữa các đầu ra và đầu vào của hàm biến đổi: Y1 = W81 Ä Z49 Y3 = W82 U Z51 Y2 = W83 U Z50 Y4 = W82 Ä Z52 Tại khối biến đổi của modul thứ nhất trong quá trình giải mã, đầu ra và đầu vào có mối quan hệ sau: J11 = Y1 Ä U1 J13 = Y3U U3 J12 = Y2U U2 J14 = Y4 Ä U4 Ta có: J11 = Y1 Ä Z49 –1 = W81 Ä Z49 Ä Z49-1 =W81 J12 = Y2 U -Z50 = W83 U Z50 U -Z50 = W83 J13 = Y3 U -Z51 = W82 U Z51 U -Z51 = W82 J11 = Y4 Ä Z50 –1 = W84 Ä Z50 Ä Z50-1 =W84 Như vậy, kết quả thu được sau khối biến đổi thứ nhất của quá trình giải mã chính là dữ liệu rõ đưa vào khối mã hoá cuối cùng của quá trình mã hoá chỉ khác là khối dữ liệu thứ 2 và khối dữ liệu thứ 3 đã đổi chỗ cho nhau. Bây giờ ta sẽ xét đến mối quan hệ thu được theo Hình 3 W81 = I81 Å MAR( I81 Å I83 , I82 Å I84 ) W82 = I83 Å MAR( I81 Å I83 , I82 Å I84 ) W83 = I82 Å MAL( I81 Å I83 , I82 Å I84 ) W84 = I84 Å MAL( I81 Å I83 , I82 Å I84 ) Trong đó MAR(X,Y) là đầu ra phía bên phải còn MAL(X,Y) là đầu ra phía bên trái của cấu trúc MA trong hình 1 khi đầu vào là X và Y. Và: V11 = J11 Å MAR (J11 Å J13, J12 Å J14) = W81 Å MAR(W81 Å W82, W83 Å W84) = I81 Å MAR( I81 Å I83 , I82 Å I84 ) Å MAR[I81 Å MAR( I81 Å I83 , I82 Å I84 ) Å I83 Å MAR( I81 Å I83 , I82 Å I84 ), I82 Å MAL( I81 Å I83 , I82 Å I84 ) Å I84 Å MAL( I81 Å I83 , I82 Å I84 )] = I81 Å MAR( I81 Å I83 , I82 Å I84) Å MAR(W81 Å W82, W83 Å W84) =I81 Tương tự ta có : V12 = I82 V13 = I83 V14 = I84 Như vậy kết quả thu được sau khối mã hoá thứ nhất của quá trình giải mã lại là dữ liệu đưa vào khối biến đổi của modul cuối cùng của quá trình mã hoá chỉ khác là khối dữ liệu thứ 2 và khối dữ liệu thứ 3 đã đổi chỗ cho nhau. Cứ như vậy ta sẽ thu được: V81 = I11 V82 = I13 V83 = I12 V84 =I14 Vì hàm biến đổi cuối cùng của quá trình giải mã cũng giống như khối biến đổi trong modul đầu tiên của quá trình mã hoá chỉ khác là có đổi chỗ của khối dữ liệu thứ 2 và khối dữ liệu thứ 3 nên ta có bản rõ thu được sau bản mã giống bản rõ đưa vào mã hoá . I.1.4 Quá trình làm việc của một Modul Để dễ dàng nhìn thấy hơn về quá trình làm việc của 1 modul. Theo như hình 3 ( Cấu trúc của 1 modul). Ta thấy 4 khối được đưa vào là X1, X2, X3, X4 cùng với các khoá Z1, Z2, Z3, Z4, Z5, Z6 thì sau các quá trình biến đổi sẽ đưa ra các khối là W1, W2, W3, W4 . Giả sử ta quy ước các kết quả của mỗi phép toán là : K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K12 thì ta có: X1 X2 X3 X4 Ä Ä Ä U Ä U Ä Å Å Å Å U Ä U U K2 K11 K1 K3 K9 K7 K10 K8 K4 K5 K6 K12 Z1 Z3 Z2 Z4 Z5 Z6 W11 W12 W13 W14 Hình 3: Cấu trúc một modul (Modul 1) Với W11: W11 = K1 Å K2 Trong đó : K1 = Z1 Ä X1 K2 = Z6 Ä K3 K3 = K4 U K5 K4 = Z5 Ä K6 K5 = K7 Å K8 K6 = K9 Å K10 K7 = Z4 Ä X4 K8 = Z2 U X2 K9 = Z3 U X3 K10 = Z1 Ä X1 Với W12 W12 = K2 Å K9 Trong đó: K2 = Z6 Ä K3 K3 = K4 U K5 K4 = Z5 Ä K6 K5 = K7 Å K8 K6 = K9 Å K10 K7 = Z4 Ä X4 K8 = Z2 U X2 K9 = Z3 U X3 K10 = Z1 Ä X1 Với W13: W13 = K8 Å K11 Trong đó: K11 = K2 U K4 K2 = Z6 Ä K3 K3 = K4 U K5 K4 = Z5 Ä K6 K5 = K7 Å K8 K6 = K9 Å K10 K7 = Z4 Ä X4 K8 = Z2 U X2 K9 = Z3 U X3 K10 = Z1 Ä X1 Với W14 W14 = K7 Å K12 Trong đó: K12 = K2 U K4 K7 = Z4 Ä X4 K2 = Z6 Ä K3 K3 = K4 U K5 K4 = Z5 Ä K6 K5 = K7 Å K8 K6 = K9 Å K10 K8 = Z2 U X2 K9 = Z3 U X3 K10 = Z1 Ä X1 CHƯƠNG II. MỘT SỐ ĐOẠN CHƯƠNG TRÌNH VÍ DỤ II.1 /* Nhân 2 số modulo(216 +1) */ Đây là đoạn chương trình ví dụ về một trong ba phép toán sử dụng trong thuật toán IDEA với đầu vào và đầu ra là các số nguyên không dấu 16 bit. Quy ước là khối toàn số 0 biểu thị cho 216. CONST static uint16 mol(register uint16 a, register uint16 b) { register word32 p; p = (word32) a*b; if(p) { b = low16(); a = p >>16; return (b-a) + (b<a); } else if (a) { return 1-a; } else { return 1 – b; } } II.2 Đoạn chương trình ví dụ về tính số nhân đảo của số x modulo 65537 CONST static unit16 mulInv(uint16 x) { uint16 t0,t1; uint16 p,y; if(x<=1) return x; /* 0 and 1 area self-inverse*/ t1 = 0x10001L/x; /*Since x>=2, this fist into 16 bits*/ y = 0x10001L % x; if (y==1) return low 16(1-t1) ; t0=1; do { q=x/y; x=x%y; t0 += q*t1; if (y==1) return t0; q =y/x; y = y%x; t1 += q*t0; } while(y! =1); return low16(1-t1); } II.3 /*Tạo 52 khối subkey từ khoá 128 bit */ Static void ideaExpandKey(byte const *userkey. word16 * EK) { int i,j; for (j =0;j < 8; j++) { EK[j] = (userkey[0] << 8) + userkey[1] ; userkey +=2; } for (i = 0; j < IDEAKEYLEN; j++) { i++; EK[i+7] = EK[i&7] > 7; EK +=i &8; i & =7; } } II.4 /* Tính khoá cho quá trình giải mã*/ Static void ideaInvaerKey(word16 const *EK, word16 DK[ IDEAKEYLEN] ) { int i; uint 16 t1,t2,t3; word16 temp[IDEAKEYLEN]; word16 *p = temp + IDEAKEYLEN; t1 = mulInv ( *EK ++); t2 = -*EK++; t3 ==-*EK++; *--p = mulInv(EK++) ; *--p = t2; *--p = t1; for (i = 0; i< IDEAROUNDS – 1; i++) { t1 = *EK++; *--p = *EK++; *--p = t1; t1 = mulInv ( *EK ++); t2 = -*EK++; t3 ==-*EK++; *--p = mulInv(EK++) ; *--p = t2; *--p = t3; *--p = t1; } t1 = -*EK++; *--p =-*EK++; *--p = t1; t1 = mulInv ( *EK ++); t2 = -*EK++; t3 ==-*EK++; *--p = mulInv(EK++) ; *--p = t3; *--p = t2; *--p = t1; memcpy(DK,temp,sizeof(temp)); burn(temp); } II.5 / * Chương trình mã */ Static void ideaClipher(byte const inbuf[8], byte outbuf[8], word 16 const *key) { register uint16 x1, x2, x3, x4, s2, s3; word16 *in, *out; #ifndef SMALL_CACHE register uint16 t16; register word32 t32; # endif int r = IDEAROUNDS; in = (word16*) inbuf; x1 = *in++; x2 = *in++; x3 = *in++; x4 = *in; #ifdef HIGHFIRST x1 = (x1>>8) | (x1<<8); x2 = (x2>>8) | (x2<<8); x3 = (x3>>8) | (x3<<8); x4 = (x4>>8) | (x4<<8); #endif do { MUL(x1,*key++); x2 +=*key++; x3 +=*key++; MUL(x4,*key++); s3 = x3; x3^ =x1; MUL(x3,*key++); s2 =x2; x2^ = x4; x2 +=x3; MUL(x2,*key++); x3 +=x2; x1^ =x2; x4^ =x3; x2^ =s3; x3^= s2; } while(--r); MUL(x1,*key++); x3 +=*key++; x2 +=*key++; MUL(x4,*key); out = (word16*) outbuf; #ifdef HIGHFIRST *out++ = x1; *out++ = x3; *out++ = x2; *out = x4; #else /* !HIGHFIRST*/ x1 =low16(x1); x2 =low16(x2); x3 =low16(x3); x4 =low16(x4); *out++ = (x1>>8) | (x1>>x8) *out++ = (x3>>8) | (x3>>x8) *out++ = (x2>>8) | (x2>>x8) *out = (x4>>8) | (x4>>x8) #endif } CHƯƠNG III. THIẾT KẾ CHƯƠNG TRÌNH MÃ DỊCH BẰNG HỆ MẬT IDEA * Giới thiệu về phần mềm mã dịch file bằng IDEA Mục đích và thiết kế: III.1. Mục đích: Phần mềm nhằm mục đích mã hoá một file cần được bảo vệ, file sau khi được mã hoá có thể để công khai trên máy(miễn là tài liệu riêng) hoặc được đưa lên đường truyền để gửi cho người khác (nếu là thông tin gửi cho họ). Nếu cần đọc tài liệu gốc ta có thể giải mã file trên. mã pháp được sử dụng là IDEA. Để có thể làm được việc trên chung ta cần một số việc làm như sau: a. Thoả thu