์๋ช
, ๊ฒ์ฆ ์๊ณ ๋ฆฌ์ฆ์ ์์์ผ๋ ํ์ํ ํด๋์ค๋ค์ ์์ฑํด๋ณด์.
Signature
- ์๋ช
์ ๊ฒฝ์ฐ ์๋ช
ํ๋ ์ฌ๋์ด ๋ฃ์ด์ ์ฃผ๋ ๊ฐ์ด๋ค.
Verify
- ํ์ ๊ณก์ ์์ ์๋ ์ ์ ๋ํ๋ด๋
S256Point
์ ๊ฒ์ฆ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค.
- ํ๋ฅด๋ง์ ์๊ณต์์ ํตํด inverse๋ฅผ 0์ ํฌํจํ ์ ์ ์ง์๋ก ๋ณ๊ฒฝํ๋ค.
- u, v๋ฅผ ๊ตฌํ๋ค.
- u, v ๋๋ค ์์์ธ N์ผ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
- ์ข๋ณ์ ๊ณ์ฐํ๋ค. (uG+vP)
- ๊ฒฐ๊ณผ๊ฐ๊ณผ r์ ๋น๊ตํ๋ค.
PrivateKey
- ์๋ช
์ ์์ฑํ
PrivateKey
ํด๋์ค๋ฅผ ๋ง๋ค์.
- ๋น๋ฐํค๋ฅผ ๋ณด๊ดํ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด์ฃผ๊ณ , ๊ฑฐ๊ธฐ์ ์๋ช
์ ์์ฑํ์ฌ ๊ฒ์ฆ์์๊ฒ ์ ๋ฌํ์.
- ๊ฒ์ฆ์๋ Public Key์ ํด๋นํ๋ ํ์์์ ์ (
S256Point
)P์ ์๋ ๋ฉ์๋์ธ verify
๋ก ๊ทธ ์๋ช
์ ๋๊ฒจ์ฃผ๋ฉด ๋์ด๋ค.
๊ฐ๋ณ์ฑ ๋ฌธ์
- ์์์ s๊ฐ N/2๋ณด๋ค ์์ s๋ฅผ ์๋ช
์ ํฌํจํ๋ค.
- ์ ๊ตณ์ด ์ด๋ฌ๋ ๊ฑธ๊น?
- ์ฐ๋ฆฌ๊ฐ ์๋ช
์ ๋ง๋ ๋ค๋ ๊ฒ์ ์ด๋ ํ ์ด์ฐ ๋ก๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ณ์๋ฅผ ์ค๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ฐ ๋ก๊ทธ ๋ฌธ์ ๋ ๊ทผ๋ณธ์ ์ผ๋ก ํ์ ๊ณก์ ์์ ์๊ฒ ๋๋ค.
- ํ์ ๊ณก์ ์ ํน์ง์ผ๋ก๋ x์ถ ๋์นญ์ด ์๋๋ฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ x๊ฐ์ ๋ํด ๊ณก์ ์์ ์๋ ์ ์ 2๊ฐ๊ฐ ๋๊ฒ ๋๋ค.
- ์ด๋ ์๋ช
์ผ๋ก r,s๊ฐ์ ์์ฑํ ๋๋ ๊ฐ์ ํน์ฑ์ ๋๋ค.
- ์ฆ, r์ ๋ํด ์ด์ฐ ๋ก๊ทธ ๋ฌธ์ ๋ฅผ ๋ง์กฑํ๋ ํด๋ s, Nโs๋ก ๋๊ฐ๋ผ๋ ๊ฒ์ด๋ค. ๋๊ฐ์ ์ ํจํ ์๋ช
์ด ์๋ ๊ฒ.
- ์ด๋ ๊ฒ 2๊ฐ๊ฐ ๋์ด ๋ฐ์ํ๋ ๋ฌธ์ (์ด๊ฑด ์์ง ๋ชจ๋ฅด๊ฒ ๋ค.)๋ฅผ ๋ง๊ธฐ ์ํด ์์ s๋ฅผ ์ฌ์ฉํ๋ค.
Code
FieldElement
Point
Constants For Bitcoin
S256Field
Constants For Bitcoin Signature
Signature
PrivateKey
Reference