
Chao xìn mọi người lại là mình đây Nhabachoc KAD.
Vì mình không có nhiều thời gian để có thể làm được một Blog hoàn chỉnh nên các bạn thông cảm nha. Hãy vào link sau để đọc được chi tiết bài viết vì ở dưới bị lỗi các công thức:
https://kadpkt.notion.site/Ch-k-s-d0db818db12f4480a6a46d1adef56e02Bài viết này có dành cho bạn?
Bạn muốn hiểu tại sao làm gì trên mạng blockchain cũng cần ký
Hành trang cần chuẩn bị:
Đã từng giao dịch hoặc biết cách tương tác với ví
Cùng tắt đèn bật ý tưởng, gét go 🪄
Như đã biết hệ thống thành luỹ của chúng ta bây giờ vô cùng vững chắc, các thông tin gần như không thể bị thay đổi nhưng nếu lại thiếu một điều vô cùng quan trọng là “giặc bên trong”. Chống giặc ngoài đã khó, đã vất vả thì những tên giả mạo dân thường <người dùng> này còn đau đầu hơn. Không làm mà vẫn có ăn, vui chơi trên công sức mồ hôi người khác vậy điều chúng ta thiếu đó là gì mà không bắt được bọn này?
Chính là XÁC MINH.
Ví dụ: bạn A có 15k, bạn B đóng giả thành bạn A mua hàng và nợ ông chủ quán 10k <nhưng ông chủ chưa đọc bài viết này nên không biết văn kiện nợ nần cần đóng dấu vân tay>. Khi ông chủ quán đến đòi nợ, bạn A ngỡ ngàng hoang mang hoảng loạn 😵💫 đi tìm quan báo cáo mình không hề nợ ai cả. Quan gọi ông bán hàng và những người liên quan đến tra hỏi nhưng vì B đóng giả quá đỉnh nên không để lộ thông tin gì và A shock quá bất tỉnh luôn 💥
Câu chuyện nhảm vừa rồi cho ta thấy một lỗ hổng đó chính là dù đã có bản ghi, bản ghi đã không bị thay đổi nhưng việc xác minh bản ghi là điều không thể, không có gì đối chứng hết. Nếu như có … à đúng rồi đấy, có cái thứ mà mình nói bên trên đó VÂN TAY thì mọi chuyện đã khác rồi.
Kỹ thuật đóng dấu vân tay, ký tên, đóng con dấu đỏ trong lĩnh vực bảo mật được gọi là Chữ ký số. Qua lỗ hổng trên thì bạn đã biết rằng chữ kỹ số được áp dụng vào đâu và để làm gì rồi nhưng trong máy tính thì chữ kỹ số không dễ hình dung như dấu vân tay mà để xác minh 1 bản ghi thì cần một loại mã hoá: Mã hoá bất đối xứng và cụ thể thì Bitcoin và ETH đang dùng mật mã đường cong ECC<Mình đã giới thiệu ở chương mã hoá rồi nhé>.
Vậy để tìm hiểu về chữ ký số hay cụ thể là EC??? ta hãy bắt đầu từ những thứ đơn giản nhất.
Private Key là gì?
Đây là chiếc chìa khóa cất giữ của cải gia tài của bạn, bạn đưa private key cho mình bạn mất hết, bạn để nhìn lén được private key bạn còn cái nịt và nếu bạn để mình hack được thì xin chia buồn với bạn, cái nịt cũng chẳng còn. Nghe qua thì thật đáng sợ phải không nhưng mà chỉ nổ to cho ghê gớm thôi 💣 💥
Private key <PrK> thực ra là con số rất lớn được sinh ngẫu nhiên. Ví dụ lấy ngẫu nhiên 1 con số trong khoảng từ {1,2,3,4,5} và kết quả là 5, 5 là PrK nhưng đời đâu dễ thế 💩 PrK có độ lớn là 256 bit vì thế PrK là con số ngẫu nhiên trong khoảng {0,…,115792089237316195423570985008687907853269984665640564039457584007913129639935} 😳 gì mà to thế:
Min thì tương đương với 256bit 0 $\Harr$ 0
Max thì tương đương với 256bit 1 $\Harr$ 115792089237316195423570985008687907853269984665640564039457584007913129639935
Các bạn có thể xem cách chuyển từ binary sang decimal
Cách sinh số ngẫu nhiên
Random từng bit 1 đến khi đủ 256bit
Dùng hàm random số từ min → max
Dùng hàm Hash
Câu hỏi rất lớn ở đây là sinh ngẫu nhiên 2 số trùng nhau thì tôi sẽ bị lộ private key và mất hết số tiền trong đó à?
Câu hỏi này rất đúng đó chớ và trên lý thuyết thì hoàn toàn là sinh được nhưng vấn đề là bao lâu. Câu hỏi này được chuyển thành bao lâu thì sẽ sinh được 2 số trùng nhau và lợi ích thu lại là gì 🕵️ Theo nghiên cứu thì mất đến hàng triệu năm để có thể sinh được 2 số trùng nhau và cũng chả ai bỏ tài nguyên, tiền bạc và bảo với các chít 100 đời nhà mình để tìm được con số đó cả nên là bạn đừng lo nha.
Public Key là gì?
Public key <PuK> là con số được sinh ra từ PrK dựa theo đường cong Elliptic <ECC> mà các bạn sau khi đọc bài của mình về ECC thì cũng đã biết việc tính từ PuK sang PrK là điều cực kỳ khó khăn và lại tính theo con số triệu năm.
Digital Signatures
Khi các bạn đã hiểu về PrK và PuK rồi thì vấn đề duy nhất còn lại là làm sao tạo được con dấu chứng minh dữ liệu mới chính là mình đẩy lên, chính tay mình tiêu tiền để kẻ xấu không thể khai thác được.
Ký: Đầu tiên mình “đóng dấu” - tạo ra chữ ký ECDSA(R, S) **bằng cách:
Bước 1: Random ra 1 con số ngẫu nhiên gọi là k
Bước 2: Áp dụng ECC tính điểm P tương tự như PuK nhưng với n là số k chứ không phải PrK
$$ P(x,y) = k*G $$
Cuối cùng ta lấy ra Px và gọi đó là r
Bước 3: Tính s bằng công thức:
$$ s = k^{-1}(z + d_{A} * r )\ (mod \ p) $$
Trong đó:
s: Signature
$k^{-1}$: nghịch đảo modulo của k
$z$: nội dung muốn ký sau khi hash
$d_{A}$: private key
$r$: tọa độ x của điểm P vừa tính bên trên
⇒ Vậy là chúng ta đã ký xong rồi đó và bản ghi sẽ được gửi thêm r và s
Verify: “Đóng dấu” xong rồi thì phải kiểm tra chữ ký xem đúng không, đúng thì mình đó chính là giao dịch của mình thật còn không đúng thì còn kêu oan được chứ:
Bước 1: Dùng PuK để tính hàm sau:
$$ P = s^{-1} z G \ + \ s^{-1} r Q_{A} $$
Trong đó:
$s^{-1}$: nghịch đảo modulo của s
$G$: điểm bắt đầu trong ECC
$Q_{A}$: public key
Bước 2: So sánh tọa độ x của P nếu trùng khớp kết quả với r ta nói rằng chữ ký hợp lệ
Tại sao lại như vậy thì cùng phân tích hàm số ở trên.
Giả sử $Q_{A} = d_{A}*G$
Thay vào P ta có:
$P = s^{-1} z G \ + \ s^{-1} r d_{A} G = (z + r d_{A}) s^{-1} G$
Tiếp tục bên trên có công thức tính $s$ thì ta tính $s^{-1}$ rồi thay vào P:
$P = (z + r d_{A}) (z + r d_{A})^{-1} (k^{-1})^{-1} * G$
$\Harr P = k*G$ và đúng bằng công thức tính P ban đầu.
Ta vừa chứng munh rằng nếu đưa đúng PrK để ký thì với PuK hoàn toàn chứng mình được chữ ký hợp lệ.