Rõ ràng, ngoài B ra không ai có thể thực hiện điều này, và do đó hệ mã này là rất an toàn. Tuy nhiên A cần pliải tliận trọng klii lấy số ngẫu nhiên A để không ai có thể đoán được ra nó (rriỗi lần liên dùng rriột số khác n ha u ) . N ế u n l iư k ẻ t h ứ ba c ó đ ượ c A t il l an il t a c ó tl iể l ấy c l i ìa kl ióa c ôn g
Khóa luận tốt nghiệp GVHD: T.s Trần Vĩnh Đức
khai của B để nâng lên lũy thừa bậc A và giải mã ra P như B đã làm ở bươc thứ hai.
2.5 Hệ mật mã sắp ba lô
Vào Iiăm 1978, Merkle và Hellman đã đề xuất một thuật toán tlieo mô hình khóa công khai dựa trên "bài toán Ba lô". Bài toán sắp ba lô phát biểu như sau:
Cho một tập hợp các số nguyên dương ữj, 1 < Ỉ < K và rriột số T dương. Hãy tìm một tập liỢp chỉ số S c {1, 2,K } sao clio:
Ì E S
Từ bài toán Ba lô này chúng ta sẽ kliảo sát các khả năng vận dụng để tạo ra thuật toán rriã kliối mật mã khóa công khai. Sơ đồ đầu tiên như sau:
• Chọn rriột vecto a = (ữi, 02,ữ k ) - được gọi là vecto mang (cargo vector)
• Với một kliối tin X = (Xi, X2,X k ) ĩ ta tliực liiện pliép mã lióa như sau:
T = ỵ 2 «i1i
i = l , k
Sơ đồ này đã tliể hiện một hàm một chiều: mã hóa tili tính toán dễ dàng nhưng việc giải mã, tức tính hàm ngược của nó, là rất khó. Bây giờ ta sẽ tiếp tục tìm cách đưa vào một cửa sập để giải mã có thể làm được dễ dàng (nếu biết cửa sập bí rriật).
Merkle áp dụng một mẹo dựa trên sử dụng vecto mang đặc biêt là vecto siêu tăng như sau. Một vecto là siêu tăng nếu thành phần Ỉ + 1 là lớn hơn tổng giá trị của các thành phần đứng trước nó (1-7- Ỉ). Khi sử dụng một vecto siêu tăng làm vecto mang thì sẽ thấy việc tính ngược, tức là giải bài toán ba lô là dễ dàng nhờ một giải tlmật tliain lam đơn giản.
Ớ bước i, tổng đích là TJ (tức là phải tìrri các CIỊ để tổng bằng TỊ), ta đem so sánh T Ị với tliànli phần 1ỚI1 nliất trong pliần CÒI1 lại của vecto, nếu lớn hơn thì thành pliần này được chọn tức là XI tương ứng bằng 1, còn ngược lại thì XỊ
tương ứng bằng 0. San đó tiếp tục chuyển sang bước sau với:
Ti +1 = T ị — X i