Phương pháp sử dụng lược đồ chữ ký số tất định

Một phần của tài liệu Nghiên cứu một số giải pháp đảm bảo an toàn và hiệu quả cho lược đồ chữ ký số kiểu ECSchnorr. (Trang 44 - 51)

Một phương án được xem xét để đảm bảo các khóa bí mật tức thời được sinh một cách độc lập là sử dụng các lược đồ chữ ký số tất định thay cho các lược đồ chữ ký số xác suất. Cụ thể, trong các lược đồ chữ ký số tất định, khóa bí mật tức thời được sinh một cách tất định và phụ thuộc vào thông điệp được ký thay vì được chọn ngẫu nhiên. Sau đây chúng ta sẽ xem xét hai lược đồ chữ ký số tất định, ECDSA và EC-Schnorr.

a) Lược đồ chữ ký số ECDSA tất định [56] (DECDSA):

Thuật toán ký (của 𝑨 trên thông điệp 𝒎):

Đầu vào: m, a.

Đầu ra: (𝑟, 𝑠).

Bước 1: Tính 𝑘 = 𝐻(𝑎||𝑚).

Bước 2: Tính 𝑅 = 𝑘𝑃 = (𝑥𝑅, 𝑦𝑅).

Bước 3: Tính 𝑟 = 𝑥𝑅 𝑚𝑜𝑑 𝑞, nếu 𝑟 = 0 quay về bước 1.

Bước 4: Tính ℎ = 𝐻(𝑚).

Bước 5: Tính 𝑠 = 𝑘−1(ℎ + 𝑎𝑟) 𝑚𝑜𝑑 𝑞; nếu 𝑠 = 0, quay lại bước 1.

Bước 6: Đưa ra chữ ký của 𝐴 trên thông điệp 𝑚 là (𝑟, 𝑠).

Thuật toán xác minh chữ ký:

Đầu vào: m, 𝑄, (𝑟, 𝑠).

Đầu ra: “Chữ ký hợp lệ” hoặc “Chữ ký không hợp lệ”.

Bước 1: Xác minh 𝑟, 𝑠 có thuộc [1, 𝑞 − 1]? Nếu sai, đưa ra “chữ ký không hợp lệ” và dừng lại.

Bước 2: Tính 𝑤 = 𝑠−1 𝑚𝑜𝑑 𝑞.

Bước 3: Tính ℎ = 𝐻(𝑚).

Bước 4: Tính 𝑢1 = ℎ𝑤 𝑚𝑜𝑑 𝑞 và 𝑢2 = 𝑟𝑤 𝑚𝑜𝑑 𝑞.

Bước 5: Tính 𝑅 = 𝑢1𝑃 + 𝑢2𝑄 = (𝑥𝑅, 𝑦𝑅) và tính 𝑣 = 𝑥𝑅 𝑚𝑜𝑑 𝑞.

Bước 6: Đưa ra “Chữ ký hợp lệ” nếu 𝑣 = 𝑟; ngược lại trả về “Chữ ký không hợp lệ”.

Chúng ta có thể thấy rằng dường như lược đồ chữ ký số DECDSA sẽ lặp vô hạn ở Bước 3 và Bước 5 của thuật toán ký, mặc dù xác suất xảy ra những sự kiện như vậy là rất thấp. Tuy nhiên, để tránh vấn đề đó xảy ra thì theo mô tả trong [56], 𝐻 sẽ được thiết lập với một hàm HMAC (cụ thể là HMAC_DRBG) sao cho nếu Bước 3 hoặc Bước 5 yêu cầu quay lại Bước 1 thì một giá trị mới sẽ được sinh ra. Cụ thể như sau:

Khi bắt đầu thuật toán ký thông điệp 𝑚, hai giá trị 𝑘 và 𝑣 sẽ được gán với một giá trị cố định, chẳng hạn 𝑘 = 0𝑥01 … 0𝑥01 và 𝑣 = 0𝑥00 … 0𝑥00.2 Sau đó tính: 𝑘 = HMAC𝑘(𝑣||𝑎||𝑚) và 𝑣 = HMAC𝑘(𝑣).

Lặp lại các bước sau cho đến khi tìm được 𝑘 thỏa mãn điều kiện của DECDSA:

- Lấy chuỗi rỗng 𝑇, nghĩa là độ dài bit của 𝑇 lúc đầu bằng 0.

- Khi độ dài bit của 𝑇 vẫn nhỏ hơn độ dài bit của 𝑞, tiếp tục thực hiện: 𝑣 = 𝐻𝑀𝐴𝐶𝑘(𝑣) và 𝑇 = 𝑇||𝑣.

- Chuyển 𝑇 sang dạng số nguyên và gán giá trị đó cho khóa 𝑘. Nếu giá trị này thỏa mãn Bước 3 và Bước 5 của thuật toán ký thì kết thúc quá trình sinh khóa 𝑘. Ngược lại, tính 𝑘 = 𝐻(𝑣||0𝑥00) và 𝑣 = 𝐻𝑀𝐴𝐶𝑘(𝑣), sau đó tiếp tục vòng lặp để tìm lại 𝑘 thỏa mãn.

Phân tích an toàn: Đối với lược đồ DECDSA và các biến thể tương ứng của các lược đồ chữ ký số dựa trên ECDLP như EC-Schnorr, EC-GDSA,…chúng ta luôn được đảm bảo rằng khả năng mà hai thông điệp khác nhau được ký bởi cùng một khóa bí mật tức thời là rất khó xảy ra nếu hàm băm được sử dụng có tính chất kháng va chạm. Điều này có được bởi vì, trong lược đồ DECDSA, nếu kẻ tấn công có thể thu được chữ ký của hai thông điệp 𝑚1 ≠ 𝑚2 mà các khóa bí mật tức thời được sử dụng trong quá trình tạo chữ ký cho chúng bằng nhau (nghĩa là 𝐻(𝑎||𝑚1) = 𝐻(𝑎||𝑚2)) thì có thể xây dựng trên kẻ tấn công này một bộ tìm kiếm va chạm hiệu quả đối với hàm băm 𝐻. Như vậy, bằng việc sử dụng các lược đồ chữ ký số tất định chúng ta đã giải quyết được bài toán lựa chọn bộ tạo số ngẫu nhiên chất lượng cao cũng như không phải lo ngại các yếu tố tạo ra bộ tạo số ngẫu nhiên yếu làm ảnh hưởng đến tính an toàn của lược đồ chữ ký số.

2 Ở đây độ dài bit của 𝑘 và 𝑣 được khởi tạo ban đầu sẽ bằng 8 ∗ 𝑐𝑒𝑖𝑙 (ℎ𝐿𝑒𝑛

8 ), với 𝑐𝑒𝑖𝑙(⋅) là hàm nhận đầu vào là một số thập phân và đưa ra số nguyên gần nhất và hLen là độ dài bit của hàm băm 𝐻.

Phân tích điểm hạn chế của giải pháp này: Như đã chỉ ra ở trên, phương pháp sử dụng các lược đồ chữ ký số tất định có ưu điểm hơn so với các lược đồ xác suất trong việc ngăn chặn các tấn công khôi phục khóa ký dài hạn từ việc dùng lặp lại khóa bí mật tức thời. Tuy nhiên, đã có một số tấn công cài đặt lên các lược đồ chữ ký số tất định. Ta xem xét kỹ hai kịch bản tấn công gây lỗi lên lược đồ chữ ký số DECDSA đã được đề xuất trong [20], ở đó kẻ tấn công được giả sử có khả năng can thiệp vật lý vào thiết bị ký. Trong các kịch bản đó, giả sử rằng kẻ tấn công đã nhận được một chữ ký chính xác (𝑟0, 𝑠0) cho thông điệp 𝑚:

* Kịch bản 1: Kẻ tấn công sửa đổi 𝑚 thành 𝑚′ sau khi 𝐻(𝑎||𝑚) đã được tính. Tấn công theo cách sửa đổi thông tin được thực hiện theo giao thức sau giữa 𝐴 là người tấn công và 𝑆 là người giữ tham số mật 𝑎.

Giao thức 2.1. Tấn công thứ nhất lên lược đồ DECDSA

𝑨 (người tấn công) 𝑺 (người giữ bí mật dài hạn 𝒂) Bước 1 Chọn thông báo 𝑚 bất kỳ

Gửi yêu cầu ký lên 𝑚 đến 𝑆

Bước 2 Tính: (𝑟, 𝑠) = 𝑆𝑖𝑔𝐷𝐸𝐶𝐷𝑆𝐴(𝑚, 𝑎)

Gửi (𝑟, 𝑠) cho 𝐴

Bước 3 Gửi yêu cầu ký lên 𝑚 đến 𝑆.

Bước 4

Thay 𝑚 bằng 𝑚’ trên thiết bị tính toán của 𝑆 trong khoảng thời gian ngay sau khi thiết bị này tính xong bước 1 trong thuật toán ký DECDSA và trước khi thiết bị này thực hiện bước 4.

Tính: (𝑟’, 𝑠’) =

𝑆𝑖𝑔𝐷𝐸𝐶𝐷𝑆𝐴(𝑚′, 𝑎) Gửi (𝑟’, 𝑠’) cho 𝐴.

Bước 5

Nếu (𝑟’ ≠ 𝑟) quay lại bước 1. Ngược lại lấy

𝛼 = 𝑠′−1ℎ′ − 𝑠−1ℎ 𝑚𝑜𝑑 𝑞 𝛽 = 𝑟(𝑠−1 − 𝑠′−1) 𝑚𝑜𝑑 𝑞 𝑎 = 𝛼𝛽−1 𝑚𝑜𝑑 𝑞.

* Kịch bản 2: Do trong thực tế ECDSA và các lược đồ chữ ký dựa trên DLP đều có nguy cơ bị tấn công timing (đo thời gian thực hiện). Để tránh điều đó, một phương pháp phổ biến được sử dụng là gây nhiễu việc tính thành phần 𝑟 trong chữ ký. Cụ thể, thành phần này được làm nhiễu bằng cách tính 𝑟 ≔ 𝑓([𝐻(𝑎||𝑚) + 𝜆1𝑞]𝑃) 𝑚𝑜𝑑 𝑞, ở đó 𝜆1 là một số nguyên ngẫu nhiên bất kỳ và 𝑓 là hàm trích xuất hoành độ của một điểm thuộc đường cong. Trong trường hợp này, có thể xảy ra kịch bản tấn công như sau đối với thuật toán ký của lược đồ DECDSA: Ở đây, giả thiết rằng kẻ tấn công có quyền can thiệp vào bước tính 𝑟 ≔ 𝑓([𝐻(𝑎||𝑚) + 𝜆1𝑞]𝑃) 𝑚𝑜𝑑 𝑞 để tạo ra một chữ ký (𝑟′, 𝑠′) khác trên cùng thông điệp m (chi tiết về cách can thiệp để gây lỗi được mô tả trong [20]). Lưu ý chữ ký này không nhất thiết phải hợp lệ. Khi đó, kẻ tấn công có thể thực hiện như tấn công theo Giao thức 2.2 và thu được khóa bí mật 𝑎 như được chỉ ra trong Kết quả 2.3.

Giao thức 2.2. Tấn công thứ 2 lên lược đồ DECDSA

𝐴 𝑆

Bước 1 Chọn thông báo 𝑚 bất kỳ

Gửi yêu cầu ký lên 𝑚 đến S

Bước 2

Tính:

(𝑟, 𝑠) = 𝑆𝑖𝑔𝐷𝐸𝐶𝐷𝑆𝐴(𝑚, 𝑎) Gửi (𝑟, 𝑠) cho 𝐴

Bước 3 Gửi yêu cầu ký lên 𝑚 đến 𝑆

Bước 4

Can thiệp vào bước tính

r ≔ 𝜋([𝐻(||𝑚) + 𝜆1𝑞]𝑃) 𝑚𝑜𝑑 𝑞 Tính: (𝑟’, 𝑠’) = 𝑆𝑖𝑔𝐷𝐸𝐶𝐷𝑆𝐴(𝑚, 𝑎). Gửi (𝑟’, 𝑠’) cho 𝐴 Bước 5 Lấy 𝛼 = (𝑟𝑠′ − 𝑟′𝑠)−1 𝑚𝑜𝑑 𝑞 𝛽 = 𝐻(𝑚)(𝑠 − 𝑠′) 𝑚𝑜𝑑 𝑞 𝑎 = 𝛼𝛽 𝑚𝑜𝑑 𝑞

Kết quả 2.3. Giao thức 2.2 sẽ trả về giá trị tính được của 𝑎 chính là khóa bí mật của 𝑆 trong trường hợp chèn lỗi khiến 𝑟′ ≠ 𝑟 ở bước 4.

Chứng minh. Kết thúc bước 5 của giao thức 2.2, chúng ta thu được hệ hai phương trình hai ẩn (mấu chốt ở đây là do tính tất định của 𝐻(𝑎||𝑚)):

𝐻(𝑎||𝑚)𝑠0 = 𝑎𝑟0+ 𝐻(𝑚) 𝑚𝑜𝑑 𝑞.

𝐻(𝑎||𝑚)𝑠′ = 𝑎𝑟′ + 𝐻(𝑚) 𝑚𝑜𝑑 𝑞.

Do đó,

𝐻(𝑎||𝑚)𝑠0𝑠′ = 𝑎𝑟0𝑠′ + 𝐻(𝑚)𝑠′ 𝑚𝑜𝑑 𝑞.

𝐻(𝑎||𝑚)𝑠′𝑠0 = 𝑎𝑟′𝑠0+ 𝐻(𝑚)𝑠0 𝑚𝑜𝑑 𝑞.

Lưu ý rằng việc chèn lỗi khiến 𝑟 ≠ 𝑟′ và do đó 𝑠 ≠ 𝑠′, tiếp theo trừ theo vế của hai phương trình ở trên ta có:

𝑎(𝑟0𝑠′ − 𝑟′𝑠0) = 𝐻(𝑚)(𝑠0− 𝑠′) 𝑚𝑜𝑑 𝑞.

𝑎 = (𝑟0𝑠′ − 𝑟′𝑠0)−1𝐻(𝑚)(𝑠0− 𝑠′) 𝑚𝑜𝑑 𝑞.

Tóm lại kết quả đã được chứng minh. ■

Các tác giả trong [20] cũng lưu ý rằng tấn công được xem xét chỉ gây ảnh hưởng đến các lược đồ chữ ký số tất định mà không áp dụng được cho các lược đồ chữ ký số xác suất mà có nguồn ngẫu nhiên tốt. Điều này có thể được minh họa thông qua trường hợp của lược đồ chữ ký số ECDSA.

Cụ thể, trong kịch bản tấn công trên lên lược đồ chữ ký số DECDSA, kẻ tấn công đều thu được một hệ hai phương trình hai ẩn (khóa ký 𝑎 và khóa bí mật tức thời 𝐻(𝑎||𝑚)) nên dễ dàng khôi phục lại khóa ký 𝑎. Trong khi đó, đối với lược đồ chữ ký số ECDSA thông thường mỗi khóa bí mật tức thời được sinh mới và được xem là một ẩn riêng biệt, nên nếu kẻ tấn công thực hiện tấn công tương tự thì chỉ thu được một hệ hai phương trình nhưng có ba ẩn (khóa ký và hai khóa bí mật tức thời). Do đó, các tấn công gây lỗi trên lược đồ chữ ký số DECDSA khó có thể áp dụng đối lược đồ chữ ký số ECDSA.

b) Lược đồ chữ ký số EC-Schnorr tất định

Thuật toán ký (của 𝑨 trên thông điệp 𝒎):

Đầu vào: m, a. Đầu ra: (𝑟, 𝑠).

Bước 1: Tính 𝑘 = 𝐻(𝑎||𝑚).

Bước 2: Tính 𝑅 = 𝑘𝑃 = (𝑥𝑅, 𝑦𝑅).

Bước 3: Tính 𝑟 = 𝐻(𝑚||𝑥𝑅), nếu 𝑟 = 0 𝑚𝑜𝑑 𝑞, quay lại bước 1.

Bước 4: Tính 𝑠 = (𝑘 − 𝑎𝑟) 𝑚𝑜𝑑 𝑞, nếu 𝑠 = 0 𝑚𝑜𝑑 𝑞, quay lại bước 1.

Bước 5: Đưa ra chữ ký của Atrên thông điệp m là(𝑟, 𝑠).

Thuật toán xác minh chữ ký:

Đầu vào: m, 𝑄, (𝑟, 𝑠).

Đầu ra: “Chữ ký hợp lệ” hoặc “Chữ ký không hợp lệ”.

Bước 1: Xác minh 𝑟, 𝑠 có thuộc [1, 𝑞 − 1]? Nếu sai, đưa ra “chữ ký không hợp lệ” và dừng lại.

Bước 2: Tính 𝑅 = 𝑠𝑃 + 𝑟𝑄 = (𝑥𝑅, 𝑦𝑅). Nếu 𝑅 = 𝒪, đưa ra “chữ ký không hợp lệ” và dừng lại.

Bước 3: Tính 𝑣 = 𝐻(𝑚‖𝑥𝑅).

Bước 4: Đưa ra “Chữ ký hợp lệ” nếu 𝑣 = 𝑟; ngược lại trả về “Chữ ký không hợp lệ”.

Tiếp theo, chúng ta xem xét lược đồ EC-Schnorr tất định với các kịch bản tấn công gây lỗi lên lược đồ chữ ký số DECDSA mà đã được đề cập ở trên. Trong các kịch bản đó, giả sử rằng kẻ tấn công đã nhận được một chữ ký chính xác (𝑟0, 𝑠0) của 𝑚 (nghĩa là 𝑟0 = 𝐻(𝑚‖𝑥𝑅), với 𝑅 = (𝑥𝑅, 𝑦𝑅) = 𝐻(𝑎||𝑚)𝑃).

* Kịch bản 1: Kẻ tấn công sửa đổi 𝑚 thành 𝑚′ sau khi 𝐻(𝑎||𝑚) đã được tính. Nghĩa là, 𝑠′ được tính với khóa bí mật tức thời 𝐻(𝑎||𝑚), và 𝑟′ = 𝐻(𝑚′‖𝑥𝑅). Trong trường hợp này, kẻ tấn công thu được:

𝐻(𝑎||𝑚) = (𝑠′ + 𝑟′𝑎) 𝑚𝑜𝑑 𝑞. Trừ theo vế hai phương trình ở trên ta có:

𝑎(𝑟0− 𝑟′) = (𝑠′ − 𝑠0) 𝑚𝑜𝑑 𝑞. 𝑎 = (𝑠′ − 𝑠0)(𝑟0− 𝑟′)−1 𝑚𝑜𝑑 𝑞.

* Kịch bản 2: Việc tính 𝑥𝑅′ ≔ 𝑓([𝐻(𝑎||𝑚) + 𝜆1𝑞]𝑃) bị tấn công, Khi đó, kẻ tấn công thu được:

𝐻(𝑎||𝑚) = (𝑠0+ 𝑎𝐻(𝑚||𝑥𝑅)) 𝑚𝑜𝑑 𝑞. 𝐻(𝑎||𝑚) = (𝑠′ + 𝑎𝐻(𝑚||𝑥𝑅′)) 𝑚𝑜𝑑 𝑞. Tương tự như trên chúng ta suy ra:

𝑎 = (𝑠′ − 𝑠0)(𝐻(𝑚||𝑥𝑅) − 𝐻(𝑚||𝑥𝑅′))−1 𝑚𝑜𝑑 𝑞.

Một phần của tài liệu Nghiên cứu một số giải pháp đảm bảo an toàn và hiệu quả cho lược đồ chữ ký số kiểu ECSchnorr. (Trang 44 - 51)

Tải bản đầy đủ (PDF)

(123 trang)