Tôi sẽ giải thích cách chữ ký liên quan đến đường cong elip hoạt động. Tiền điện tử chủ yếu sử dụng các đường cong elip do kích thước chữ ký nhỏ hơn cần được xuất bản trên chuỗi khối.
Khi một khóa riêng, chỉ là một số nguyên lớn, được ánh xạ tới một khóa chung (là một điểm trên một đường cong elip xác định), ánh xạ này có các thuộc tính toán học nhất định. Lưu ý rằng ánh xạ này được thực hiện theo cách "một chiều". Bạn có thể dễ dàng ánh xạ từ khóa riêng sang điểm đường cong elip của khóa chung, nhưng thực tế bạn không thể đảo ngược thao tác đó.
Thứ nhất, các điểm trên đường cong elip sẽ tạo thành một nhóm Abelian theo một phép toán mà chúng tôi gọi là "phép cộng". Điều này có nghĩa là bạn có thể làm những gì giống như đại số đơn giản với các điểm. Bạn có thể lấy điểm $A$ và $B$, thêm chúng để nhận điểm $C$, và bạn sẽ có thể quan sát điều đó $A+B==B+A$. Lưu ý rằng chúng tôi chỉ xác định các hoạt động cộng và trừ và chúng tôi không thể "nhân" điểm hoặc "chia" điểm với các điểm khác.
Thứ hai, ánh xạ của các số nguyên khóa riêng tới các điểm là "đồng hình bổ sung". Điều này có nghĩa là nếu bạn có khóa riêng $a$ và $b$, ánh xạ tới các khóa công khai $A$ và $B$, thì khóa công khai của $a+b$ sẽ bằng cả hai $A+B$ và để $C$.
Việc ánh xạ khóa riêng sang khóa chung chỉ đơn giản là lấy khóa riêng $a$ và tính khóa công khai $aG$, có nghĩa là thêm điểm nổi tiếng $G$ với chính nó $a$ lần. Vì sẽ mất mãi mãi để thực sự tính toán điều này bằng cách thêm G vào chính nó $a$ lần, có sẵn các phím tắt toán học. Vì các phím tắt này chỉ tồn tại để thực hiện phép nhân một cách nhanh chóng chứ không phải để quay ngược lại và xác định khóa riêng từ bất kỳ kết quả phép nhân nào, điều này trở thành "một chiều"cửa sập" chức năng.
Bây giờ, hãy tưởng tượng rằng tôi có khóa riêng $a$ và khóa công khai $A=aG$, và bạn đưa ra một thách thức với tôi. Bạn nghĩ ra một số nguyên khóa riêng ngẫu nhiên $x$, và bạn yêu cầu tôi cung cấp cho bạn một số nguyên phản hồi $y$ để bạn có thể xác minh rằng $xA==yG$. Tôi sẽ chỉ có thể vượt qua thử thách của bạn nếu tôi biết khóa riêng $a$, điều này sẽ cho phép tôi tính toán $y=xa$. Điều này sẽ xác minh bởi vì sau đó $xA==xaG==yG$.
Những gì tôi đã mô tả ở trên có hai sai sót. Đầu tiên là khi tôi vượt qua thử thách, bạn có thể dễ dàng tính khóa riêng của tôi $a$ như $y/x$.
Lỗ hổng thứ hai là tôi cần bạn đưa ra một thử thách cho tôi, thay vì chỉ đơn giản là có thể cung cấp cho bạn chữ ký mà không cần phải tương tác với bạn.
Lỗ hổng đầu tiên được giải quyết bằng cách bao gồm một "yếu tố mù", cho phép tôi vượt qua thử thách mà không tiết lộ khóa riêng của mình. Ví dụ: với chữ ký Schnorr, tôi chọn một khóa riêng ngẫu nhiên $k$, chỉ tiết lộ $K=kG$, và sau đó yêu cầu bạn cho thử thách của bạn $x$. Sau đó, tôi tạo ra một giá trị $y$ để bạn có thể xác minh rằng $xA==K+yG$. Bây giờ, sau khi tôi tiết lộ $y$ để vượt qua thử thách, bạn biết rằng tôi chỉ có thể tính toán $y$ với kiến thức về khóa riêng của tôi $a$, nhưng bạn không thể tính toán khóa riêng của tôi mà không biết yếu tố che khuất bí mật của tôi $k$.
Lỗ hổng thứ hai được giải quyết bằng cách sử dụng FiatâShamir heuristic để tạo thử thách bằng cách sử dụng chức năng đóng vai trò là "Oracle ngẫu nhiên" điều đó cho phép tôi đưa ra thử thách ngẫu nhiên mà không có cách nào để gian lận. Trong trường hợp lược đồ chữ ký ECDSA, đầu ra của hàm này là tọa độ x của khóa chung được ánh xạ từ một đầu vào cụ thể. Trong trường hợp của Schnorr chữ ký, hàm này là hàm băm bảo mật bằng mật mã, chẳng hạn như SHA512/256.