Nếu bạn chưa biết gì hoặc mới tìm hiểu về Elliptic Curve, bạn có thể đọc lại các bài trước của series này:
Bài viết về: Đường cong elliptic trên trường số thực
Bài viết về: Đường cong elliptic trên trường hữu hạn
Ở các bài viết trước, chúng ta đã biết rằng có thể tạo ra một nhóm con cyclic với phép cộng từ một điểm bất kỳ trên đường cong . Đây là cơ sở để xây dựng lược đồ chữ ký số dựa trên đường cong elliptic (ECDSA - Ellipti Curve Digital Signature Algorithm)
Ưu điểm của hệ mật mã trên đường cong elliptic (ECC - Elliptic Curve Cryptography) là nó sử dụng khóa có độ dài nhỏ hơn RSA truyền thống. Hãy xem lại bảng thống kê dưới đây để thấy rõ điều đó:

Hiện nay tất cả các hệ mã hóa được sử dụng trong công nghệ blockchain đều dùng ECC cho mọi kỹ thuật: mã hóa, trao đổi khóa, chữ ký số, ZKP, … Trong bài này mình sẽ giới thiệu kỹ thuật chữ ký số trên ECC.
Chữ ký số cho phép:
Xác thực người gửi
Đảm bảo dữ liệu không bị thay đổi
Không thể chối bỏ
ECDSA được sử dụng rộng rãi trong nhiều hệ thống:
Bitcoin
Ethereum
Transport Layer Security
Nhờ sử dụng elliptic curve, ECDSA đạt mức bảo mật cao với kích thước khóa nhỏ hơn nhiều so với RSA.
Một hệ thống chữ ký số thường gồm 3 bước:
Key Generation – tạo khóa
Signing – ký dữ liệu
Verification – xác minh chữ ký
ECDSA thực hiện các bước này dựa trên toán học của elliptic curve.
Cho điểm là điểm sinh của nhóm con bậc trên đường cong .
Chọn ngẫu nhiên làm secret key.
Tính public key
Gọi là giá trị hash của message , tính .
Chú ý: việc tính là để nhằm đảm bảo giá trị trong khoảng
Chọn giá trị ngẫu nhiên , tính điểm . Lưu ý rằng giá trị phải ngẫu nhiên và chỉ dùng 1 lần duy nhất vì nếu hai chữ ký sử dụng cùng một gia trị , attacker có thể tính ngược lại được secret key. Lịch sử đã từng có nhiều sự cố bảo mật do lỗi này, ví dụ trong hệ thống của Sony khi triển khai chữ ký số cho PlayStation 3. Do đó trong thực tế người ta thường sử dụng chuẩn deterministic ECDSA (RFC 6979) để tạo .
Tính . Nếu , chọn lại với giá trị khác.
Tính . Nếu , chọn lại với giá trị khác.
Chữ ký là cặp số . Lưu ý là cặp số cũng là một chữ ký hợp lệ.
Dùng public key :
Tính
Tính , tính
Tính , tính
Tính
Chữ ký hợp lệ nếu
Xét điểm :
Như vậy ta có:
Mà , vì thế thuật toán chính xác!
Trong quá trình ký, ta có:
trong đó:
: private key
: số ngẫu nhiên chỉ dùng một lần
: hash của message
: chữ ký
: order của điểm sinh
Giả sử attacker biết được một giá trị dùng cho 2 message, ta có 2 chữ ký:
Message :
Message :
Mà:
giống nhau vì
giống nhau vì bị reuse
Trừ hai phương trình ta có:
Suy ra:
Như vậy attacker tính được . Và từ có thể tính ra private key bằng cách:
Quay lại phương trình ban đầu
Nhân 2 vế với :
Suy ra:
Mà attack đã biết tất cả giá trị nên chúng tính được private key .
Các bước trong demo này:
Chọn tham số đường cong, update
Chọn một điểm trên đường cong để làm điểm sinh
Chọn khóa bí mật, chọn giá trị để ký, sinh chữ ký
Verify chữ ký
No comments yet. Be the first to comment!