Chương 1: Các khái niệm cơ bản. Trong chƣơng này sẽ trình bầy tổng quan về Bản quyền số và các khái niệm cơ bản đƣợc sử dụng trong toàn Luận văn. Bao gồm: Khái niệm toán học, khái niệm Thủy vân số, Chữ ký số, Xác thực điện tử cho việc giữ bản quyền tài liệu số. Chương 2: Cấu trúc của các loại tài nguyên số phổ biến trên Internet Chƣơng này trình bầy về cấu trúc của các nhóm tài nguyên số thƣờng đƣợc trao đổi trên Internet.
Bao gồm: Nhóm tài nguyên về Audio (*.midi), Nhóm tài nguyên về Image (*.jpge) Chương 3: Các kỹ thuật bảo về bản quyền tài liệu số. Trên cơ sở các nhóm tài nguyên số đã đƣợc phân loại và tìm hiểu cấu trúc lƣu trữ trong chƣơng 2. Trong chƣơng này trình bầy các kỹ thuật tƣơng ứng với mỗi nhóm tài nguyên số đó. Các kỹ thuật này phụ thuộc vào cấu trúc lƣu trữ và đặc trƣng dữ liệu của các nhóm tài nguyên số.
6 z Chƣơng 1: CÁC KHÁI NIỆM CƠ BẢN. Nhƣ đã biết, việc truyền tin trên mạng rất dễ bị “đánh cắp”, vì vậy để đảm bảo an toàn cho nội dung thông tin đƣợc truyền ngƣời ta thƣờng mã hóa trƣớc khi truyền nó trên mạng, nhằm giấu đi ý nghĩa của nó. Các hệ mã đƣợc chia thành 2 nhóm chính, Mã hóa khóa công khai và mã hóa khóa bí mật. Trong phần này sẽ trình bầy các khái niệm về mật mã và các vấn đề liên quan.
Một hệ mật mã là một bộ năm (P, C, K, E, D) trong đó: + P: là một tập hữu hạn các bản rõ. + C: là một tập hƣu hạn các bản mã. + K: là một tập hƣu hạn các khoá. + Với mỗi k K, có một hàm lập mã ek E, ek: P C, và một hàm giải mã dk D, dk: C P sao cho dk(ek(x)) = x với mọi x P.2 Phân loại các hệ mã hóa.
Các hệ mã hóa đƣợc chia thành 2 nhóm chính. “Mã hóa khóa đối xứng” và “Mã hóa khóa công khai”. Mã hóa khóa đối xứng: Là hệ mã mà việc lập mã và giải mã thƣờng dùng chung một khóa, hoặc nếu có dùng hai khóa thì khi khóa lập mã bị lộ ngƣời ta có thể tìm ra khóa giải mã trong thời gian tƣơng đối ngắn. Tuy nhiên do đặc tính mã hóa tƣơng đối nhanh, các hệ mã loại này thƣờng đƣợc dùng để mã hóa các loại tài liệu có kích thƣớc lớn.
7 z Các hệ mã loại này nói chung có một điểm yếu rất dễ bị tấn công đó là quá trình chuyển giao khóa giữa các bên liên quan (người nhận). Trong hệ mã hóa khóa đối xứng ngƣời ta còn chia các hệ mã thành 3 nhóm: “Mã hóa cổ điển”, “Mã hóa khối” và “Mã dòng”. Kẻ tấn công Bộ khóa k’ (kênh công cộng) (k’, k”) Lập mã Giải mã y (kênh công cộng) ek’(x)=y dk”(y)=x Bản rõ Kết quả A B Hình 1.1: Trao đổi mật mã sử dụng Hệ mã hóa khóa công khai 8 z Mã hóa khóa công khai: Là hệ mã mà việc lập mã và giải mã dùng hai khóa khác nhau. Hai khóa này có mối liên hệ chặt chẽ và có thể suy ra nhau phụ thuộc vào từng hệ mã cụ thể.
Trong đó khóa lập mã đƣợc công khai (public) và khóa giải mã đƣợc giữ bí mật (private). Các hệ mã loại này đƣợc xây dựng dựa trên các bài toán “khó” nên quá trình lập mã và giải mã tƣơng đối chậm, nên thƣờng đƣợc dùng để mã hóa các dữ liệu nhỏ. Nhƣ vậy các hệ mã khóa khóa công khai đã khắc phục đƣợc nhƣợc điểm lớn nhất của mã hóa khóa đối xứng là quá trình phải chuyển giao khóa giữa các bên liên quan. Trong các sơ đồ mã hóa khóa công khai ngƣời nhận A tính toán ra cặp khóa sau đó giữ cho mình khóa giải mã (private key) và công khai khóa lập mã (public key).
Mọi ngƣời trên mạng muốn gửi thông tin mật cho A sẽ sử dụng khóa công khai lập mã rồi gửi bản mã cho A. Do chỉ duy nhất A có khóa giải mã tƣơng ứng nên chỉ A mới giải mã đƣợc tài liệu đó.3 Một số hệ mã hóa cụ thể.Mã hóa RSA Bài toán RSA (RSA Problem): Cho một số nguyên dƣơng n là tích của hai thừa số nguyên tố lẻ p và q. Một số nguyên dƣơng b sao cho gcd(b, (p-1)(q-1)) = 1 và một số nguyên c. Bài toán đặt ra: tìm số nguyên x sao cho xb ≡ c (mod n) Thuật toán Sinh khóa cho mã khóa Công khai RSA 1.
Sinh hai số nguyên tố lớn p và q có giá trị xấp xỉ nhau 2. Chọn một số ngẫu nhiên b, 1 < b < (n), sao cho gcd(b, (n)) = 1 4. Sử dụng thuật toán Euclide để tính số a, 1 < a < (n), sao cho a. Khóa công khai là (n, b), Khóa bí mật là (a) Thuật toán Mã hóa RSA (i).
Lấy khóa công khai (n, b) theo thuật toán trên b. Chọn một bản mã x, trong khoảng [1, n-1] c. Tính : y = xb mod n d. Nhận đƣợc bản mã y (ii).
Giải mã : Sử dụng khóa bí mật a để giải mã : x = ya mod n 10 z Chứng minh hàm giải mã: Ta có a.b ≡ 1 (mod (n)) vì vậy tồn tại một số nguyên dƣơng k sao cho a.(n) và nếu gcd(x,p)=1 thì theo định lý Fermat ta có: xp-1≡1 (mod p) Thực hiện việc nâng lũy thừa hai vế của đồng dƣ thức trên với số mũ là k(q-1) sau đó nhân cả hai vế với x ta đƣợc: x1+k(p-1)(q-1) ≡x (mod p) Trong trƣờng hợp khác, nếu gcd(x,p)=p thì đồng dƣ thức trên vẫn đúng vì mỗi vế của nó đều có dạng 0 modulo p.b ≡ x (mod p) Lập luận tƣơng tự ta có: xa.b ≡ x (mod q) Cuối cùng, vì p, q là hai số nguyên tố khác nhau nên: xa. Bài toán logarit rời rác (Discrete logarithm problem): Cho một số nguyên tố p và một phần tử sinh α của tập Z *p , một phần tử β Z *p. Bài toán đặt ra: tìm một số nguyên x, 0 ≤ x ≤ (p-2), sao cho αx ≡ β (mod p) Thuật toán Sinh khóa cho mã khóa Công khai ElGamal 1. Sinh ngẫu nhiên một số nguyên tố lớn p và α là phần tử sinh của Z *p 2.
Chọn ngẫu nhiên một số nguyên a, 1 ≤ a ≤ p−2, tính αa mod p 3. Khóa công khai la (p, α, αa). Lấy khóa công khai (p, α, αa) theo thuật toán trên b. Chọn một bản mã x, trong khoảng [0, p−1] c.
Chọn ngẫu nhiên một số nguyên k, 1 ≤ k ≤ p−2 d. Tính γ = αk mod p và δ = x. Nhận đƣợc bản mã là (γ, δ) (ii). Sử dụng khóa bí mật (a) và tính γp-1-a mod p b.δ mod p Chứng minh hàm giải mã: (γ-a).
Hàm băm theo nghĩa đơn giản là hàm cho tƣơng ứng một mảng dữ liệu lớn với một mảng dữ liệu nhỏ, đƣợc sử dụng rộng rãi trong nhiều ứng dụng khác nhau của tin học. Trong công nghệ mã, hàm băm cho khả năng đảm bảo toàn vẹn dữ liệu (data integrity). Những hàm băm nhƣ vậy đƣợc gọi là hàm băm mật mã. Các hàm băm nhận một chuỗi bits có chiều dài tùy ý (hữu hạn) làm dữ liệu đầu vào và tạo ra một chuỗi bits có chiều dài cố định n bit (n > 0 là hằng số), gọi là mã băm (hash code hay message digest).
Ký hiệu D là miền xác định và R là miền giá trị của hàm băm h(x), ta thƣờng có số lƣợng phần tử của D lớn hơn rất nhiều so với số lƣợng phần tử của R (|D| > |R|), vì vậy hàm băm h(x) không thể là đơn ánh, nghĩa là luôn tồn tại một cặp phần tử đầu vào khác nhau nhƣng có cùng giá trị mã băm. Trong lĩnh vực mã hóa thông tin, mã băm đƣợc xem nhƣ hình ảnh đặc trƣng, thu gọn của một chuỗi bits có độ dài tùy ý (hữu hạn), và đƣợc dụng để nhận diện chuỗi bits đó. Kết hợp với chữ ký số, các hàm băm đƣợc dùng cho việc đảm bảo tính toàn vẹn dữ liệu. Trong sơ đồ truyền tin mã băm của chuỗi bits x đƣợc tính tại thời điểm xác định T1, quá trình truyền chuỗi bits x và mã băm tƣơng ứng đƣợc thực hiện.
Tại thời điểm T2 sau đó, để kiểm tra chuỗi bits x có bị thay đổi hay không, ngƣời ta chỉ cần tính mã băm của x tại thời điểm này, sau đó so sánh với mã băm có đƣợc tại thời điểm T1. Nếu hai mã băm này trùng nhau chấp nhận chuổi bits x tại thời điểm T2 trùng khớp với chuỗi bits x tại thời điểm T1, hay nói cách khác chuỗi bits x vẫn chƣa bị thay đổi. Chiều dài cố định Chiều dài tùy ý (n bit, n > 0) Thông điệp (message) Hàm băm thông điệp Văn bản đại diện (âm thanh, hình ảnh, (Hash Function) (message digest) văn bản…) Hình 1.2: Hàm băm mật mã 13 z Các hàm băm đƣợc phân thành 2 lớp chính: lớp các hàm băm không có khóa (unkeyed hash functions) và lớp các hàm băm có khóa (keyed hash functions). Các hàm băm không khóa chỉ có duy nhất một đầu vào là thông điệp cần tính giá trị băm.
Còn các hàm băm có khóa nhận 2 giá trị đầu vào: thông điệp cần tính giá trị băm và khóa bí mật để tiến hành công việc. Cách phân lớp này dựa vào thành phần tham biến đầu vào của các hàm băm. Ngoài ra, trong thực tế còn có nhiều cách phân loại khác nhau. Tuy nhiên trong phạm vi luận văn chỉ xét loại hàm băm không khóa.1 Một số tính chất cơ bản của hàm băm a.
Tính kháng tiền ảnh (preimage resistance): Với mọi đầu ra y cho trƣớc không thể tính toán để tìm đƣợc bất kì dữ liệu đầu vào x’ nào sao cho giá trị băm h(x’) của nó bằng giá trị đầu ra y đã cho. Tính kháng tiền ảnh thứ hai (2nd preimage resistance): Với mọi dữ liệu đầu vào x1 cho trƣớc, không thể tính toán để tìm ra đƣợc bất kỳ một đầu vòa x2 nào (x1 x2) mà giá trị băm h(x2) của nó bằng với giá trị băm h(x1) của x1. Tính kháng xung đột (conllision resistance): Không thể tính toán để tìm đƣợc hai dữ liệu đầu vào x1 và x2 phân biệt sao cho chúng có cùng giá trị băm (tức là h(x1) = h(x2)) Nhận xét 1: Hàm băm h(x) thỏa mãn tính chất (c) thì cũng thỏa mãn tính chất (b). Nhận xét 2: Hàm băm h(x) thỏa mãn tính chất (c) nhƣng có thể không thỏa mãn tính chất (a).
Để thấy điều này ta xét ví dụ sau đây.