1. Trang chủ
  2. » Giáo Dục - Đào Tạo

(LUẬN văn THẠC sĩ) phân tích đánh giá một số hệ mã hóa luận văn ths công nghệ thông tin 1 01 10

91 30 0

Đ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

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  TRỊNH VIẾT CƯỜNG PHÂN TÍCH ĐÁNH GIÁ MỘT SỐ HỆ MÃ HÓA LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN PGS.TS.TRỊNH NHẬT TIẾN Hà Nội - 2007 TIEU LUAN MOI download : skknchat@gmail.com Để hoàn thành đƣợc luận văn này, xin đƣợc gửi lời cảm ơn chân thành đến PGS, TS Trịnh Nhật Tiến, ngƣời nhiệt tình hƣớng dẫn tơi hồn thành luận văn cao học Tôi xin gửi lời cảm ơn chân thành đến thầy cô, ngƣời giảng dạy khóa học cao học 2004 – 2006, đồng nghiệp bạn bè ngƣời thân nhiệt tình ủng hộ tạo điều kiện cho tơi hồn thành luận văn Trang phụ bìa …………………………………………………………… Lời cam đoan …………………………………………………………… TIEU LUAN MOI download : skknchat@gmail.com Lời cảm ơn ……………………………………………………………… Mục lục …………………………………………………………………… Danh sách ký hiệu, chữ viết tắt …………………………………… Lời mở đầu ……………………………………………………………… Chƣơng 1: CƠ SỞ LÝ THUYẾT ………………………………………… 1.1 SỐ HỌC CÁC SỐ NGUYÊN ……………………………… 1.1.1 Tính chia hết số nguyên……………………………… 1.1.2 Đồng dƣ phƣơng trình đồng dƣ tuyến tính……………… 12 1.1.3 Thặng dƣ thu gọn phần tử nguyên thuỷ………………… 13 1.2 XÁC SUẤT VÀ THUẬT TOÁN XÁC SUẤT……………… 15 1.2.1 Khái niệm xác suất ……………………………………… 15 1.2.2 Tính bí mật hoàn toàn hệ mật mã………………… 15 1.2.3 Thuật tốn xác xuất ………………………………………… 16 1.3 ĐỘ PHỨC TẠP TÍNH TỐN……………………………… 17 1.3.1 Khái niệm độ phức tạp tính tốn ………………………… 17 1.3.2 Hàm phía Hàm phía có cửa sập………………… 18 Chƣơng 2: MỘT SỐ PHƢƠNG PHÁP THÁM MÃ…………………… 19 2.1 PHƢƠNG PHÁP THÁM MÃ………………………………………… 19 2.1.1 Thám mã biết mã …………………………………………… 19 2.1.2 Thám mã biết rõ ……………………………………………… 20 2.1.3 Thám mã với rõ đƣợc chọn …………………………………… 21 2.1.4 Thám mã với mã đƣợc chọn …………………………………… 23 2.2 TÍNH AN TỒN CỦA HỆ MÃ …………………………………… 28 2.2.1 An tồn chiều (One – Wayness) ………………………… 28 2.2.2 An toàn ngữ nghĩa (Semantic Security) …………………………… 29 2.2.3 Tính khơng phân biệt đƣợc (Indistinguishability)(IND) ………… 31 2.2.4 An toàn ngữ nghĩa tƣơng đƣơng với IND ………………………… 34 2.2.5 Khái niệm an toàn mạnh IND-CCA ………………………… 36 Chƣơng 3: PHÂN TÍCH ĐÁNH GIÁ MỘT SỐ HỆ MÃ HOÁ ………… 38 3.1 HỆ MÃ HOÁ RSA …………………………………………………… 38 TIEU LUAN MOI download : skknchat@gmail.com 3.1.1 Hệ mã RSA an toàn trƣớc công KPA, COA, CPA ………… 38 3.1.2 Hệ mã RSA khơng an tồn ngữ nghĩa …………………………… 38 3.1.3 Hệ mã RSA khơng đạt an tồn trƣớc cơng CCA ……………… 39 3.1.4 Ứng dụng thực tế …………………………………………………… 39 3.2 HỆ MÃ HOÁ ELGAMAL ………………………………………… 40 3.2.1 ELGAMAL đảm bảo an toàn ngữ nghĩa ………………………… 40 3.2.2 Hệ mã ELGAMAL an tồn trƣớc cơng KPA, COA, CPA 41 3.2.3 Hệ mã ELGAMAL khơng đạt an tồn trƣớc cơng CCA ……… 41 3.3 HỆ MÃ HỐ CRAMER-SHOUP (1998) …………………………… 42 3.3.1 Giả thuyết Decisionnal Diffie-Hellman …………………………… 42 3.3.2 Sơ đồ Hệ mã ……………………………………………………… 43 3.3.3 Độ an toàn hệ mã hoá ………………………………………… 45 3.3.4 Cài đặt hệ mã hố ………………………………………………… 45 3.3.5 Hệ mã hố khơng dùng hàm băm 46 3.4 HỆ MÃ HOÁ LAI (Hybrid Encryption) 47 3.4.1 Hệ mã hoá KEM 47 3.4.2 Hệ mã hoá SKE 49 3.4.3 Hệ mã hố cơng khai lai (Hybrid public-key encryption) (HPKE) … 54 3.5 HỆ MÃ HOÁ OAEP (Optimal Aysmmetric Encryption Padding) 58 3.5.1 Mơ hình máy tƣ vấn ngẫu nhiên (Random Oracle Model) 58 3.5.2 An toàn Planitext – Awareness …………………………………… 60 3.5.3 Lƣợc đồ OAEP …………………………………………………… 62 3.5.4 Đánh giá lƣợc đồ ………………………………………………… 64 Chƣơng 4: THỬ NGHIỆM CHƢƠNG TRÌNH MÃ HĨA…………… 70 CƠNG CỤ …………………………………………… 70 4.2 CÁC THÀNH PHẦN CỦA CHƢƠNG TRÌNH …………… 70 KẾT LUẬN ……………………………………………………………… 76 TÀI LIỆU THAM KHẢO …………………………………………… 78 TIEU LUAN MOI download : skknchat@gmail.com DANH SÁCH CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT STT Chữ viết tắt Ý nghĩa TIEU LUAN MOI download : skknchat@gmail.com  Phép Xor || Phép ghép hai chuỗi CCA Thám mã với mã chọn (Chosen ciphert attack) CCA1 Thám mã với mã chọn trước (Non-adaptive chosen ciphertext attack) CCA2 Thám mã với mã chọn trước thích hợp (Adaptive chosen ciphertext attack) COA Thám mã biết mã (Ciphertext only attack) CPA Thám mã với rõ chọn (Chosen plaintext attack) DDH Giả thuyết Decisionnal Diffie-Hellman HPKE Hệ mã hố cơng khai lai (Hybrid public-key encryption) 10 IND Tính khơng phân biệt (Indistinguishability) 11 KEM Máy đóng gói khố (key encapsulation mechanism) 12 KPA Thám mã biết rõ (Known plaintext attack) 13 MAC Mã xác thực thông tin lần (one-time message authentication code) 14 OAEP Optimal Aysmmetric Encryption Padding 15 PA An toàn Planitext – Awareness 16 Pr Xác suất 17 RO Máy tư vấn ngẫu nhiên (Random Oracle) 18 SKE Hệ mã hoá khoá đối xứng lần (one-time symmetric-key encryption scheme) 19 TCR Họ hàm băm Target collision resistant 20 WPA An toàn Weak plaintext – awareness LỜI MỞ ĐẦU TIEU LUAN MOI download : skknchat@gmail.com Luận văn tổng hợp lại phương pháp công chủ yếu hệ mã Luận văn trình bày dạng cơng mạnh biết đến CCA2, dạng công có thật thực tế Về chất dạng cơng “năng lực” mà thám mã có được, dạng cơng mạnh có nghĩa “năng lực” thám mã lớn Từ xảy thực tế, nhà lập mã giả thiết tình xấu xảy thực tế (tình xấu có nghĩa thám mã có “năng lực” gì) Đến tình xấu xảy mà nhà lập mã giới nghĩ đến, tình mà thám mã có máy tư vấn giải mã (Oracle Decryption), tức tương đương với phương pháp cơng CCA2, thật tình xảy thực tế, tất nhiên với mức độ Cũng khn khổ luận văn, trình bày đánh giá số hệ mã phương pháp công Và phương pháp công mạnh (như CCA2), hệ mã thông dụng RSA Elgamal dễ dàng bị phá Trên sở đó, luận văn trình bày hai hệ mã thơng dụng có hiệu OAEP Cramer Shoup, chứng minh an tồn phương pháp cơng mạnh CCA2 Tất nhiên đôi với điều phức tạp chi phí cho việc cài đặt hệ mã cao, đồng thời cịn nhược điểm chứng minh tính bảo mật Với OAEP, phải xem hàm băm máy tư vấn ngẫu nhiên (Random Oracle) chứng minh tính bảo mật Việc có hàm băm với tính chất thực tế, nghiên cứu Còn Cramer Shoup tính an tồn, phải dựa giả thuyết Decisionnal Diffie Hellman Để so sánh hai hệ mã, OAEP có ưu điểm dựa giả thuyết toán học mạnh hàm phía (RSA), cịn Cramer Shoup dựa giả thuyết tốn học yếu Decisionnal Diffie Hellman (mặc dù chưa TIEU LUAN MOI download : skknchat@gmail.com có chứng minh cụ thể mạnh nào), ngược lại OAEP lại phải dựa vào mơ hình RO cịn gây nhiều tranh cải Tất nhiên tuỳ theo yêu cầu thực tế người dùng tính chất thực tế mà hệ mã phải đáp ứng, người sử dụng chọn hệ mã cho phù hợp với yêu cầu Ví dụ để mã hố thơng tin khơng mang tính quan trọng, khơng thiết phải dùng hệ mã cài đặt với chi phí tốn hai hệ mã Có thể cài đặt phiên đơn giản hai hệ mã Cramer Shoup giới thiệu cách cài đặt đơn giản hơn, đạt an toàn IND-CCA1 dùng hệ mã đơn giản tốn Và tất nhiên tính khơng ngừng phát triển mật mã, nên phương pháp công độ an toàn hệ mã đánh giá, tương đối Tương lai phải xem xét đến mơ hình kẻ cơng dùng đến máy tính lượng tử Trên sở đánh giá phân tích hệ mã, luận văn biện pháp bảo vệ an tồn thơng tin Chƣơng 1: CƠ SỞ LÝ THUYẾT TIEU LUAN MOI download : skknchat@gmail.com 1.1 SỐ HỌC CÁC SỐ NGUYÊN Ta ký hiệu Z tập số nguyên Z+ tập số nguyên không âm Trong mục ta nhắc lại số kiến thức số học số nguyên cần cho việc trình bày lý thuyết mật mã 1.1.1 Tính chia hết số nguyên Tập Z đóng kín phép cộng, trừ nhân, khơng đóng kín phép chia Vì số nguyên a chia cho số nguyên b thương số nguyên q có ý nghĩa đặc biệt, ta nói a chia hết cho b, a bội số b, b ước số a, ký hiệu b|a Dễ thấy ước số số nguyên, bội số số nguyên, moi số nguyên a ước số, đồng thời bội số Số ngun d gọi ước số chung hai số nguyên a b d|a d|b Số nguyên d gọi ước số chung lớn a b d > 0, d ước số chung a b, ước số chung a b ước số d Ta ký hiệu ước số chung lớn a b gcd(a, b) Dễ thấy với số nguyên dương a ta có gcd(a, 0) = a, ta quy ước gcd(0, 0) = Số nguyên a > gọi số nguyên tố a khơng có ước số ngồi a Số a hợp số khơng phải nguyên tố Số nguyên n > viết dạng: n = p1α1 p2α2… pkαk Trong p1, p2, …, pk số nguyên tố khác nhau, α1, α2, …, αk số mũ nguyên dương Nếu không kể thứ tự thừa số ngun tố dạng biểu diễn nhất, ta gọi dạng khai triển tắc n Định lý 1.1 10 TIEU LUAN MOI download : skknchat@gmail.com Nếu b > b|a gcd(a, b) = b Nếu a = bq + r gcd(a, b) = gcd(b, r) Số nguyên m gọi bội số chung a b m chia hết cho a b Số m gọi bội số chung nhỏ a b ký hiệu lcm(a, b), m bội số chung a b, bội số chung a b bội m Với số nguyên dương a b ta có quan hệ Lcm(a, b).gcd(a, b) = a.b Thuật tốn Euclide tìm ước số chung lớn nhất: INPUT: hai số nguyên không âm a b, với a ≥ b OUTPUT: ước số chung lớn a b While b > Begin r := a mod b; a := b; b := r; End; Cho kết (a) Ta biết gcd(a, b) = d, phương trình bất định a.x + b.y = d Có nghiệm nguyên (x, y), nghiệm ngun tìm thuật toán Euclide mở rộng sau: Thuật toán Euclide mở rộng: 11 TIEU LUAN MOI download : skknchat@gmail.com Nhận xét: Như nhận xét trên, t t‟ có khả tính tốn thiết bị phần cứng tương đương nhau, 2-k0 2-k1 lượng không đáng kể, nên ‟ lượng không đáng kể Kết luận: Ý nghĩa định lý : B thám mã CCA1 tạo mã nào, tồn máy Plaintext – Extractor P với xác xuất lớn chạy thời gian đa thức, để tìm rõ tương ứng Tức thám mã B khơng có khả tạo mã hợp lệ, mà khơng biết rõ tương ứng Vì theo định nghĩa WPA (3.5.2.1), hệ mã OAEP đạt an toàn WPA, hay đạt an toàn IND-CCA1 78 TIEU LUAN MOI download : skknchat@gmail.com 3.5.4.3 Điều kiện OAEP đạt an toàn IND-CCA2 * Khái niệm hàm phía phận có cửa sập Hàm f: {0, 1}k → {0, 1}k, hay tương đương với f : {0, 1}n+k1 × {0, 1}k0 → {0, 1}n+k1 × {0, 1}k0 , với k = n + k1 + k0  Hàm f (, ) - phía, thám mã A chạy thời gian giới hạn , có xác xuất thành cơng Succow(A), giới hạn  , đó: Succow(A) = Prx,y [ A(f(x, y)) = (x, y)] ≤  Ký hiệu Succow(A) xác xuất thành công thám mã A, từ đầu vào f(x, y) cho đầu (x, y)  Hàm f (, ) - phía phận (partial – domain one – way) thám mã A chạy thời gian giới hạn , có xác xuất thành cơng Succpd-ow(A), giới hạn  , đó: Succpd-ow(A) = Prx,y [ A(f(x, y)) = x ] ≤  Ký hiệu Succpd-ow(A) xác xuất thành công thám mã A, từ đầu vào f(x, y) cho đầu x  Hàm f (l, , ) - phía phận tập (set partial – domain one – way) thám mã A cho đầu tập l phần tử, chạy thời gian giới hạn , có xác xuất thành cơng Succs-pd-ow(A), giới hạn  , đó: Succs-pd-ow(A) = Prx,y [ x  A(f(x, y)) ] ≤  Ký hiệu Succs-pd-ow(A) xác xuất thành công thám mã A, từ đầu vào f(x, y) cho đầu x Khác so với Succpd-ow(A) thám mã A cho đầu tập giá trị x, cần x thuộc giá trị tập thám mã A thành công 79 TIEU LUAN MOI download : skknchat@gmail.com Ta ký hiệu Succow() xác xuất thành công lớn Succow(A), (của tất thám mã A) Hay Succow() = max (Succow(A)) với A Tương tự: Succpd-ow() xác xuất thành công lớn Succpd-ow(A) Succs-pd-ow(l, ) xác xuất thành công lớn Succs-pd-ow(A) Rõ ràng với  l ≥ ta ln có: Succs-pd-ow(l, ) ≥ Succpd-ow() ≥ Succow() Trong trường hợp hàm RSA ([7]) ba khái niệm tương đương 80 TIEU LUAN MOI download : skknchat@gmail.com Định lý 3.6: Gọi A thám mã CCA2 chống lại an toàn ngữ nghĩa lược đồ OAEP (Gk, E, D), f hàm phía phận có cửa sập Giả sử A có xác xuất thành cơng việc phá vỡ tính an tồn ngữ nghĩa hệ mã OAEP  , thời gian chạy lớn , tạo qD , qG qH truy vấn tới máy tư vấn giải mã, hàm băm G H Thì: Succs-pd-ow(qH , ‟) + (qD qG + qD + qG )/2k0 + qD/2k1 ≥  / Với ‟ ≤  + qH qG (Tf + O(1)), Tf thời gian để tính toán f Nhận xét: Do chọn ban đầu nên 2k0 2k1 số lớn, giá trị (qD qG + qD + qG )/2k0 + qD/2k1 “khơng đáng kể” Mặt khác tính chất hàm phía phận có cửa sập nên Succs-pd-ow(qH , ‟) giá trị “không đáng kể”, dẫn đến tổng Succs-pd-ow(qH , ‟) + (qD qG + qD + qG )/2k0 + qD/2k1 lượng “không đáng kể”, nên  / lượng không đáng kể, cuối suy  giá trị “không đáng kể” Điều chứng tỏ lược đồ OAEP an tồn IND-CCA2 f hàm phía phận có cửa sập Kết luận Với đánh giá trên, hệ OAEP an toàn phương pháp cơng CCA2, có nhược điểm phải giả thuyết mơ hình Random Oracle tồn tại, tức hàm G H phải có tính chất đặc biệt kết luận 3.5.1.1 Gần số nghiên cứu rằng, để xây dựng hàm khó thực tế ([20]) Những hệ OAEP cài đặt thực tế nay, xây dựng hàm băm, mà tác giả (người xây dựng hàm băm đó) chứng minh có tính chất phương pháp Heuristic, chưa có luận tốn học cụ thể 81 TIEU LUAN MOI download : skknchat@gmail.com Chƣơng 4: THỬ NGHIỆM CHƢƠNG TRÌNH MÃ HĨA Cơng cụ Ngơn ngữ lập trình Java, dùng soạn thảo Jcreator Pro, trình biên dịch JDK Sun Chương trình viết dạng Applet, chạy máy tính cài hệ điều hành (Window, Linux, ) có cài trình duyệt Các thành phần chƣơng trình mã hóa Cramer-Shoup  Modul 1: Xây dựng hàm băm private BigInteger hashOnOneNumber(BigInteger p, BigInteger g3, BigInteger g4, BigInteger nn){ BigInteger q = p.shiftRight(1); return hashOnTwoNumbers(p,g3,g4,nn.divide(q),nn.mod(q)); } private BigInteger hashOnTwoNumbers(BigInteger p, BigInteger g3, BigInteger g4, BigInteger a1, BigInteger a2){ return ((g3.modPow(a1,p)).multiply(g4.modPow(a2,p))).mod(p); } private BigInteger hashBitList(int k, BigInteger p, HashFunction hash, boolean[] bits){ BigInteger g3 = hash.hash_g1; BigInteger g4 = hash.hash_g2; int m = k+k-2; int len = m - k - 1; int lengthDeficit = len - (bits.length % len); int index = - lengthDeficit; int i; BigInteger arg; byte[] zero = {0}; BigInteger res = new BigInteger(zero); BigInteger e; boolean[] transferList = new boolean[len]; while(index < bits.length){ for(i = 0; i < len; i++){ if(index < 0) transferList[i] = false; 82 TIEU LUAN MOI download : skknchat@gmail.com else transferList[i] = bits[index]; index++;} arg = bits2BigInteger(transferList).add((res.shiftLeft(1)).setBit(0).shiftLeft(len)); res = hashOnOneNumber(p, g3, g4, arg); } return res; } class HashFunction { BigInteger hash_g1; BigInteger hash_g2; HashFunction(byte[] hash_g1_rep, byte[] hash_g2_rep){ hash_g1 = new BigInteger(hash_g1_rep); hash_g2 = new BigInteger(hash_g2_rep); } }  Modul 2: Xây dựng lớp khóa cơng khai khóa bí mật class SecretKey { int k; BigInteger p; BigInteger x1; BigInteger x2; BigInteger y1; BigInteger y2; BigInteger z; HashFunction hash; SecretKey(int k_id, byte[] p_rep, byte[] x1_rep, byte[] x2_rep, byte[] y1_rep, byte[] y2_rep, byte[] z_rep, byte[] hash_g1_rep, byte[] hash_g2_rep){ k = k_id; p = new BigInteger(p_rep); x1 = new BigInteger(x1_rep); x2 = new BigInteger(x2_rep); y1 = new BigInteger(y1_rep); y2 = new BigInteger(y2_rep); z = new BigInteger(z_rep); hash = new HashFunction(hash_g1_rep,hash_g2_rep); } } 83 TIEU LUAN MOI download : skknchat@gmail.com class PublicKey { int k; BigInteger p; BigInteger g1; BigInteger g2; BigInteger c; BigInteger d; BigInteger h; HashFunction hash; PublicKey(int k_id, byte[] p_rep, byte[] g1_rep, byte[] g2_rep, byte[] c_rep, byte[] d_rep, byte[] h_rep, byte[] hash_g1_rep, byte[] hash_g2_rep){ k = k_id; p = new BigInteger(p_rep); g1 = new BigInteger(g1_rep); g2 = new BigInteger(g2_rep); c = new BigInteger(c_rep); d = new BigInteger(d_rep); h = new BigInteger(h_rep); hash = new HashFunction(hash_g1_rep,hash_g2_rep); } }  Modul 3: Xây dựng hàm mã hóa hàm giải mã Hàm mã hố: public boolean[] encrypt(boolean[] message){ int messageLength = message.length; int el = pk.k - 1; int i; int toEncrypt = (1+ (message.length / el))*pk.k*4; boolean[] mChunk = new boolean[pk.k]; mChunk[pk.k-1] = false; boolean[] cChunk = new boolean[pk.k*4]; boolean[] res = new boolean[toEncrypt]; int resIndex = 0; BigInteger r,u1,u2,e,m,alpha,v; int pointer = 0; int index = 0; while(pointer < messageLength){ index = 0; while((index < el)&&(pointer < messageLength)) mChunk[index++] = message[pointer++]; 84 TIEU LUAN MOI download : skknchat@gmail.com while(index < el) mChunk[index++] = ( (rnd.nextInt() & 1) == 1); m = bits2BigInteger(mChunk); r = bigRandom(pk.k+1).mod(pk.p); u1 = pk.g1.modPow(r,pk.p); u2 = pk.g2.modPow(r,pk.p); e = ((pk.h.modPow(r,pk.p)).multiply(m)).mod(pk.p); alpha = hashBitList(pk.k,pk.p,pk.hash,bitListThree(pk.k,u1,u2,e)); v= ((pk.c.modPow(r,pk.p)).multiply(pk.d.modPow(r.multiply(alpha),pk.p))).mod(pk.p); cChunk = bitListFour(pk.k,u1,u2,e,v); for(i=0; i < 4*pk.k; i++) res[resIndex++] = cChunk[i]; } return res; } Hàm giải mã: public boolean[] decrypt(boolean[] cryptoText){ boolean[] res = new boolean[((cryptoText.length / (4 * sk.k))+1)*(sk.k-1)]; boolean[] cChunk = new boolean[sk.k]; boolean[] mChunk = new boolean[sk.k]; BigInteger c; int index = 0; int resIndex = 0; int len = cryptoText.length; int i; byte[] zero = {0}; BigInteger zeroBig = new BigInteger(zero); BigInteger u1,u2,e,v,alpha,m; while(index+(4*sk.k) < len){ for(i = 0; i< sk.k; i++) cChunk[i] = cryptoText[index++]; u1 = bits2BigInteger(cChunk); for(i = 0; i< sk.k; i++) cChunk[i] = cryptoText[index++]; u2 = bits2BigInteger(cChunk); for(i = 0; i< sk.k; i++) cChunk[i] = cryptoText[index++]; e = bits2BigInteger(cChunk); for(i = 0; i< sk.k; i++) cChunk[i] = cryptoText[index++]; v = bits2BigInteger(cChunk); alpha = hashBitList(sk.k,sk.p,sk.hash,bitListThree(sk.k,u1,u2,e)); if((v.equals(((u1.modPow(sk.x1.add(alpha.multiply(sk.y1)),sk.p)).multiply(u2.modPow(sk.x2.a dd(alpha.multiply(sk.y2)),sk.p))).mod(sk.p)))) 85 TIEU LUAN MOI download : skknchat@gmail.com { m = (e.multiply((u1.modPow(sk.z,sk.p)).modInverse(sk.p))).mod(sk.p); cChunk = bigInteger2bits(sk.k, m); for(i = 0; i < sk.k - 1; i++) res[resIndex++] = cChunk[i]; } else for(i = 0; i < sk.k-1; i++) res[resIndex++] = true; } return res; } }  Modul 4: Xây dựng số hàm hỗ trợ khác private BigInteger bits2BigInteger(boolean[] bits){ int len = bits.length; byte[] bytes = new byte[2 + (len/8)]; int b; int index = 1+ len/8; int bitIndex = 0; bytes[0] = 0; bytes[1] = 0; while(bitIndex

Ngày đăng: 27/06/2022, 09:12

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN