Untitled Chƣơng IV Các hệ mã mật khóa công khai 77 CHƢƠNG IV CÁC HỆ MÃ MẬT KHÓA CÔNG KHAI Trong các hê ̣mã mâṭ khóa bí mâṭ nếu chúng ta biết khóa và hàm mã hóa chúng ta có thể[.]
Chƣơng IV: Các hệ mã mật khóa công khai CHƢƠNG IV: CÁC HỆ MÃ MẬT KHÓA CÔNG KHAI Trong các hệ mã mật khóa bí mật nế u chúng ta biế t khóa và hàm mã hóa chúng ta có thể tìm đƣợc khóa và hàm giải mã mợt cách nhanh chóng (thời gian đa thƣ́c) Mợt hệ mã mật khóa bí mật là một hệ mã mật mà tất cả mọi ngƣời biết hàm mã hóa và khóa mã hóa nhƣng khơng tờn tại mợt tḥt toán thời gian đa thức để có thể tính đƣợ c khóa giải mã tƣ̀ các thông tin đó Khái niệm hệ mã mật khóa công khai Các hệ mã đƣợ c trình bày các chƣơng trƣớc đƣợ c gọi là các hệ mã khóa bí mật, khóa đới xứng, hay các hệ mã truyề n thố ng (conventional) Các hệ mã này có các điểm yếu sau đây: Nế u sớ lƣợ ng ngƣời sƣ̉ dụng lớn sớ khóa tăng rấ t nhanh, chẳ ng hạn với n ngƣời sƣ̉ dụng thì số khóa sẽ là n *(n-1)/2 đó rấ t khó quản lý , phƣ́c tạp và không an toàn Dƣ̣ a các hệ mã này không thể xây dƣ̣ ng các khái niệm và dich ̣ vụ nhƣ chƣ̃ ký điện tử, dịch vụ xác thực hóa ngƣời dùng cho các ứng dụng thƣơng mại điện tƣ̉ Vào năm 1975 Diffie và Hellman một công trin ̀ h của ̀ h (một bài báo) đã đề xuấ t các ý tƣởng cho phép xây dƣ̣ ng lên các hệ mã hoạt động theo các nguyên tắ c mới gắ n liề n với các bên truyề n tin chƣ́ không gắ n với các cặp truyề n tin Nguyên tắ c hoạt động của các hệ mã là mỗi bên tham gia truyề n tin sẽ có khóa, mợt khóa gọi là khóa bí mật và mợt khóa đƣợ c gọi là khóa cơng khai Khóa bí mật là khóa dùng để giải mã và đƣợc giữ bí mật (KS), khóa cơng khai là khóa dùng để sinh mã đƣợc công khai hóa để bấ t cƣ́ cũng có thể sƣ̉ dụng khóa này gƣ̉i tin cho ngƣời chủ của hệ mã (KP) Ngày có thể thấy rõ nguyên tắc này việc gửi email , mọi ngƣời đề u có thể gƣ̉i email tới một điạ chỉ email nào đó , nhƣng chỉ có ngƣời chủ sở hƣ̃u của địa email mới có thể đọc đƣợc nợi dung c ủa bức thƣ , cịn ngƣời khác khơng Với các hệ mã khóa công khai việc phân phố i khóa sẽ trở nên dễ dàng qua các kênh cung cấ p khóa công cộng , số lƣợ ng khóa hệ thố ng quản lý cũng sẽ it́ (là n khóa cho n ngƣời dùng) Các dịch vụ mới nhƣ chữ ký điện tử , thỏa thuận khóa cũng đƣợ c xây dƣ̣ ng dƣ̣ a các hệ mã này Các yêu cầu của loại hệ mã này: - Việc sinh KP, KS phải dễ dàng - Việc tính E(KP, M) là dễ dàng - Nế u có C = E(KP, M) và KS việc tìm bản rõ cũng là dễ - Nế u biế t KP việc dị tìm KS là khó - Việc khôi phục bản rõ tƣ̀ bản mã là rấ t khó Khi A muố n truyề n tin cho B , A sẽ sƣ̉ dụng khóa K P của B để mã hóa tin tức và truyề n bản mã tới cho B, B sẽ sƣ̉ dụng khóa bí mật của mình để giải mã và đọc tin: 77 Chƣơng IV: Các hệ mã mật khóa công khai Plaintext A Khóa cơng khai (KP) Khóa bí mật (KS) Mã hóa Plaintext B Giải mã Ciphertext Hình 4.1: Mơ hình sƣ̉ dụng của các hệ mã khóa cơng khai PKC Ciphertext = E(KP,Plaintext) ,Plantext = D(KS, E(KP,Plaintext)) (1) Plaintext A Khóa bí mật (KS) Khóa cơng khai (KP) Mã hóa Plaintext Giải mã B Signed Message Hình 4.2: Mơ hình sƣ̉ dụng của các hệ mã khóa công khai PKC Ciphertext = D(KS, Plaintext), Plaintext = E(KP, D(KS, Plaintext)) (2) Mô hin (1) đƣợ c sƣ̉ ̀ h (2) đƣợ c sƣ̉ dụng c ho các hệ chƣ̃ ký điện tƣ̉ còn mô hin ̀ h dụng cho các hệ mã mật Các hệ mã này đƣợc gọi là các hệ mã khóa cơng khai PKC (Public Key Cryptosystems) hay các hệ mã bấ t đố i xƣ́ng (Asymmetric Encryption Scheme) Nguyên tắ c cấ u tạo của các ̣ mã mâ ̣t khóa cơng khai Các hệ mã khóa cơng khai đƣợc xây dựng dựa các hàm đƣợc gọi là các hàm phía hay hàm chiề u (one–way functions) Hàm một chiều f : X Y làm một hàm mà nế u biế t x X ta có thể dễ dàng tin ́ h đƣợ c y = f(x) Nhƣng với y bấ t kỳ Y việc tìm x X cho y = f(x) là khó Có nghĩa là -1 việc tim ̀ hàm ngƣợ c f là khó Ví dụ nếu có các sớ ngun tớ P 1, P2, , Pn việc tính N = P1 * P2 * * Pn là dễ nhƣng nếu có N việc phân tích ngƣợc lại là mợt bài toán khó với N lớn Để thuận tiện các hàm một phía đƣợ c sƣ̉ dụng các hệ mã PKC thƣờng đƣợ c trang bi ̣ các cƣ̉a bẫy (trapdoor) giúp cho việc tìm x thỏa mã y = f(x) là dễ dàng nếu biế t đƣợ c cƣ̉a bẫy này Hàm của bẫy (trapdoor function): là một hàm một chiều việc tính f -1 là nhanh chúng ta biế t đƣợ c cƣ̉a bẫy của hàm Ví dụ việc tìm nghiệm của bài toán xế p balô 0/1 hệ mã xế p balô Knapsack mà chúng ta sẽ học phầ n tiế p theo là một hàm một phía (việc mã hóa rấ t nhanh và dễ dàng nhƣng tìm vectơ nghiệm tƣơng ƣ́ng là khó) nhƣng nế u ta biế t cƣ̉a b ẫy (Vectơ xế p balô siêu tăng A‟ ) việc giải bài toán lại dễ dàng Một số ̣ mã khóa công khai 3.1 Hê ̣ mã knapsack Bài toán xếp ba lô tổng quát: 78 Chƣơng IV: Các hệ mã mật khóa công khai Cho M, N và A1, A2, , AN là các sớ ngun dƣơng tìm các sớ xi khơng âm cho: N M= x *A i 1 i i Vecto A = (A1, A2, , AN) đƣợ c gọi là vecto xế p balô còn vectơ X = (x1, x2, …, xN) là vectơ nghiệm Một trƣờng hợ p riêng đáng quan tâm của bài toán xế p ba lô tổ ng quát là trƣờng hợ p mà xi {0, 1} Khi đó ta có bài toán xế p ba lô 0, Vecto xế p ba lô siêu tăng : Trong trƣờng hợ p vecto (A1, A2, , AN) đƣợ c sắ p lại thành (A‟1, A‟2, , A‟N) cho: i ta có: A j i ' j < A‟i vecto (A1, A2, , AN) đƣợ c gọi là vecto xế p balo siêu tăng Khi (A1, A2, , AN) là một vecto xếp balo siêu tăng ta có tính chấ t: M >= A‟i i Do đó việc giải bài toán xế p ba lô 0/1 trở nên dễ dàng rấ t nhiề u Hệ mã knapsack Merkle và Hellman đƣa vào năm 1978 Cách xây dựng: Chọn vecto siêu tăng A‟ = (a‟1, a‟2, , a‟N), chọn số M > * a‟N, chọn ngẫu nhiên số u < M và (u, M) = Xây dƣ̣ ng Vecto A = (a1, a2, , aN) đó = (a‟i * u) mod M Khóa: KP = (A, M), KS = (u, u-1) Không gian các bản rõ là không gian mọi dãy N bit P = (x1, x2, , xn) Mã hóa: C = ( N a * x )mod M i 1 i i Giải mã: tính C ‟ = C * u-1 mod M sau đó giải bài toán xế p ba lơ tìm đƣợc P = (x1, x2, , xn) 0/1 với A ‟, C‟ tƣ̀ đó Ví dụ 1: Cho hệ mã Knapsack có A‟ = (2, 3, 6, 12, 25), N = 5, M = 53, u = 46, u-1 = 15 a) Hãy tìm các khóa của hệ mã b) Mã hóa và giải mã bản mã tƣơng ứng của bản rõ M = 01001 3.2 Hê ̣ mã RSA Hệ mã RSA đƣợ c đặt tên dƣ̣ a theo các chƣ̃ cái đầ u của tác giả của hệ mã là Rivest, Shamir và Adleman Đây là thuật toán mã hóa nởi tiếng và cũng là tḥt toán đƣợc ứng dụng thực tế Để cài đặt RSA ban đầu ngƣời dùng sinh khóa cơng khai khóa bí mật của bằng cách: 79 Chƣơng IV: Các hệ mã mật khóa công khai chọn hai số nguyên tố lớn ngẫu nhiên (cỡ gần 100 chữ sớ) khác p q tính N = p*q chọn một số e nhỏ N và (e, (N)) = 1, e đƣợ c gọi là số mũ lập mã tìm phần tử ngƣợc của e vành module (N), d là số mũ giải mã khóa cơng khai KP = (e, N) khóa bí mật là KS = K-1P = (d, p, q) Việc thiết lập khóa này đƣợc thực hiện lần mợt ngƣời dùng thiết lập (thay thế) khóa công khai của họ Mũ e thƣờng là khá nhỏ (đễ mã hóa nhanh), và phải là ngun tớ với (N) Các giá trị thƣờng đƣợc chọn cho e là hoặc 216 – = 65535 Tuy nhiên e nhỏ thì d sẽ tƣơng đố i lớn Khoá bí mật là (d, p, q) Các sớ p và q thƣờng có giá trị xấp xỉ nhƣng không đƣợc bằng Chú ý là việc để lộ một các thành phần làm cho hệ mã hóa trở thành khơng an toàn Sử dụng RSA để mã hóa mợt thơng điệp M: C = Me (mod N) (0 amj + i mod p = y mod p => x = (mj + i) mod (p-1) 84 Chƣơng IV: Các hệ mã mật khóa công khai Độ phức tạp của thuật toán phụ thuộc vào m = [(p-1)1/2], với giá tri ̣ của m , cầ n tính các phầ n tƣ̉ thuộc hai danh sách L và L 2, là các phép toán lũy thừa phụ thuộc vào j và i , i và j lại phụ thuộc vào m nên có thể nhận thấ y là thuật toán này chỉ có thể áp dụng nhƣ̃ng trƣờng hợ p mà p nhỏ Thuâ ̣t toán Pohlig-Hellman Có trƣờng hợp đặc biệt mà bài toán Logarithm rời rạc có thể giải quyết với độ phƣ́c tạp nhỏ O(p1/2), chẳ ng hạn nhƣ p – có các ƣớc nguyên tố nhỏ Một thuật toán làm việc với các trƣờng hợ p nhƣ vậy đã đƣợ c Pohlig và Hellman đƣa vào năm 1978 Giả sử p – = 2n * Gọi a là phần tử nguyên thủy của Z p , p là một số lẻ và a (p-1)/2 mod p = -1 Gọi m là số nguyên thuộc khoảng [0, p-2] mà cần tìm để y = am mod p Giả sử m đƣợc biể u diễn thành dạng nhi ̣ phân m = m0 + 2m1 + 4m2 + … + 2n-1mn-1 Khi đó: y p 1 (a m ) p 1 (a m0 m1 m2 2 n1 mn1 ) p 1 a m0 p 1 1 nÕu m0 1 nÕu m0 ̣ đƣợ c y Việc tính y (p-1)/2 mấ t nhiề u nhấ t 2[log2p] bƣớc và sẽ cho ta m Khi xác đinh = ya 0, ta lặp lại thao tác tƣơng tƣ̣ để tính m1: -m c1 p 1 (a m1 m2 2n2 mn1 ) p 1 a m1 p 1 1 nÕu m1 1 nÕu m1 Quá trình tính toán cứ thể tiếp diễn cho tới tìm đƣợc m của thuật toán là: n(2[log2p] + 2) ~ O((log2p)2) 3.4 Các hệ mã mật dựa đƣờng cong Elliptic i Độ phức tạ p Hầ u hế t các sản phẩ m và các chuẩ n sƣ̉ dụng các hệ mã khóa công khai để mã hóa và chữ ký điện tử hiện sử dụng hệ mã RSA Tuy nhiên với sƣ̣ phát triể n của ngành thám mã và lực ngày càng tăng nhanh chóng của các hệ thớng máy tính , đợ dài khóa để đảm bảo an toàn cho hệ mã RSA cũng ngày càng tăng nhanh chóng , điề u này làm giả m đáng kể hiệu của các hệ thố ng sƣ̉ dụng hệ mã RSA , đặc biệt là với các ứng dụng thƣơng mại điện tử trực tuyến hay các hệ thớng realtime địi hỏi thời gian xƣ̉ lý nhanh chóng Gầ n một hệ mã mới đã xuấ t hiện và có khả thay thế cho RSA, đó là các hệ mã khóa công khai dƣ̣ a các đƣờng cong Elliptic – ECC (Elliptic Curve Cryptography) Điể m hấ p dẫn nhấ t của các hệ mã dƣ̣ a các đƣờng cong Elliptic là nó cho phép đạt đƣợc tính an toàn tƣơng đƣơng với RSA kić h thƣớc khóa sƣ̉ dụng lại nhỏ nhiều, làm giảm số phép tính sử dụng mã hóa, giải mã và đạt đƣợc hiệu và tớ c đợ cầ n thiế t Trên lý thuyế t tính an toàn của ECC không cao bằ ng so với RSA và cũng khó giải thích một cách dễ hiể u so với RSA hay Diffie -Hellman Cơ sở toán học đầy đủ của các hệ mã dựa đƣờng cong Elliptic vƣợt ngoài phạm vi của tài liệu này , phầ n này ch úng ta xem xét các vấn đề bản của các đƣờng cong Elliptic và các hệ mã ECC 85 Chƣơng IV: Các hệ mã mật khóa công khai 3.4.1 Nhóm Abel Nhóm Abel G , thƣờng đƣợ c ký hiệu là {G, •} là mợt tập hợp với mợt phép toán hai ngơi ký hiệu là •, kế t qủa thƣ̣ c hiện của phép toán với hai phần tử a , b G, ký hiệu là (a • b) cũng là một phần tử thuộc G, tính chất này gọi là đóng đới với tập G Đới với phép toán • các mệnh đề sau đề u thỏa mãn: (A1): a, b G thì (a • b) G, tính đóng (Closure) (A2): a, b, c G thì a • (b • c) = (a • b) • c, tính kết hợp (Associate) (A3): Tờ n tại e G: e • a = a • e = a a G, e đƣợ c gọi là phầ n tƣ̉ đơn vi ̣ của tập G (A4): a G, a‟ G: a • a‟ = a‟ • a = e, a‟ là phần tử nghịch đảo của a (A5): a, b G: a • b = b • a, tính giao hoán (Commutative) Rấ t nhiề u các hệ mã khóa công khai dƣ̣ a các nhóm Abel Chẳ ng hạn, giao thƣ́c trao đổ i khóa Diffie -Hellman liên quan tới việc nhân các c ặp số nguyên khác không theo modulo q (ngun tớ ) Các khóa đƣợc sinh phép tính lũy thừa nhóm Đới với các hệ mã ECC, phép toán cộng các đƣờng cong Elliptic đƣợc sử dụng là phép toán bản Phép nhân đƣợc định nghĩa là sự lặp lại của nhiều phép cộng : a x k = (a + a + … + a) Việc thám mã liên quan tới việc xác đinh ̣ giá tri ̣ của k với các thông tin công khai là a và (a x k) Một đƣờng cong Elliptic là một phƣơng trình với hai biế n và các hệ số Các đƣờng cong sƣ̉ dụng cho các hệ mã mật có các biế n và các hệ thố ng là các phầ n tƣ̉ thuộc về một trƣờng hƣ̃u hạn , điề u này tạo thành một nhóm Abel Trƣớc hế t chúng ta sẽ xem xét các đƣờng cong Elliptic trƣờng số thƣ̣ c 3.4.2 Các đƣờng cong Elliptic trƣờng số thƣ̣c Các đƣờng cong Elliptic không phải là các đƣờng Ellipse Tên gọi đƣờng cong Elliptic đƣợ c đặt vì loại đƣờng cong này đƣợ c mô tả bởi các phƣơng trin ̀ h bậc ba, tƣơng tƣ̣ nhƣ các phƣơng trình đƣợ c dùng để tính chu vi của một Ellipse Ở dạng chung phƣơng trình bậc biể u diễn một đƣờng cong Elliptic có dạng: y2 + axy + by = x3 + cx2 + dx + e Trong đó a , b, c, d, e là các số thƣ̣ c , x và y là các biến thuộc trƣờng số thực Với mục đích để hiểu các hệ mã ECC xét các dạng đƣờng cong Elliptic có dạng: y2 = x3 + ax + y (phƣơng trin ̀ h 1) Các phƣơng trình này đƣợc gọi là các phƣơng trình bậc ba, các đƣờng cong Elliptic chúng ta đinh ̣ nghiã một điể m đặc biệt gọi là điể m O hay điể m tại vô cùng (point at infinity) Để vẽ đƣờng cong Elliptic chúng ta cầ n tính các giá tri ̣ theo phƣơng trình: y x3 ax b Với mỗi giá tri ̣ cụ thể của a và b , cho hai giá trị của y (một âm và một dƣơng) tƣơng ƣ́ng với một giá tri ̣ của x , các đƣờng cong dạng này đối xứng qua đƣờng thẳ ng y = Ví dụ hình ảnh của mợt đƣờng cong Elliptic: 86 ... 23 ( ) mod 23 11 nên 93 xR = (1 12 - - ) mod 23 = 17 yR = (11(3 - 17) - 10) mod 23 = 20 Nên P + Q = (17, 20 ) Để tìm 2P ta tính: ( 3( 32 ) ) mod 23 ( ) mod 23 ( ) mod 23 10 20 ... (modulus (key size in bits) (size of n in bits) size in bits) 56 1 12 5 12 80 160 1 024 1 12 224 20 48 128 25 6 30 72 92 384 7680 25 6 5 12 15360 Nguồ n: Certicom Bảng 4.3: Bảng so sánh các hệ mã... là P A = 121 (2, 2) = (115, 48) Khóa riêng của B là n B = 20 3 nên khóa công khai cùa B là P B = 20 3 (2, 2) = ( 130, 20 3) Khóa bí mật (chia sẻ ) giƣ̃a A và B là 121 (130, 20 3) = 20 3(115,