암호화화폐가 정말 인류사상 엄청난 발전을 이룩한 점이 무었이냐면 은행시스템에 있어서 계좌계설이란 절차가 없다는 점입니다.
이에 대해 설명해 보겠습니다.
암호화 화폐의 계좌번호는 공개키라고 해서 비밀키를 특정 수학공식을 통해 서 공개키가 만들어집니다............특정 계좌번호(즉 공개키(x,y좌표)) 는 꼭 비밀키를 가지고 있습니다.
비밀키쌍 공개키쌍 1:1 대응이며 2^256가지(256비트)의 비밀키공개키쌍이 존재합니다.
이 수학공식의 특징은 비밀키로 공개키를 계산하는것은 가능해도
공개키를 통해서 비밀키를 계산하는 것은 불가능 하다는 것입니다.............
(공개키를 통해서 비밀키를 계산할수 있다는것은 ecdsa 역암호화 수학해법을 풀었다라고 얘기할수있고 엄청난 수학천재라면 가능할수도 있을지 모릅니다 .)
어떤 사람이 임의로 수학계산을 통해 특정 하나의 공개키,비밀키를 계산해낸다고 칩시다.
그 공개키 비밀키는 해당 암호화화폐에 블록체인에 쓰이지도 않았고 기록도 되어있지 않지만
그 자체로써 그 계좌는 생성된 것이고 해당 블록체인에 그 계좌로 입금, 송금을 하는게 가능합니다.
페이퍼월렛이 무엇이냐면 그냥 비밀키와 공개키를 계산해서 종이에 기록해놓은것뿐입니다. 그 계좌에 암호화 화폐를 입금시켜 블록체인에 기록해놓으면 나중에 그 계좌의 비밀키를 통해서 송금메세지(ecdsa서명)를 작성하여 블록체인에 쓰는게 가능합니다. 송금메세지(ecdsa서명)역시 특정 수학공식에 의해 비밀키로 밖에 작성할수 없으며 ecdsa서명의 메세지를 통하여 비밀키를 알아내는것역시 거의 불가능한 가까운 수학해법이고 단지 그 ecdsa서명이 해당 공개키의 비밀키쌍으로 통해서 만들어낸 것인지 아닌지 검증하는 것만이 가능합니다.
ecdsa만으로 충근히 그 암호화 화폐의 보안이 가능합니다.
ecdsa의 수학적해법이 깨지면 블록체인의 보안역시 깨집니다.
그러니까 블록체인이 크게 필요없는셈입니다.
블록체인은 그냥 장부역활이고 그것을 다수의 컴퓨터가 동일하게 보관하는 작업일 뿐입니다.
이 블록체인의 작업때문에 암호화 화폐의 전송 속도가 느린것입니다.
실제로 블폭체인의 구조를 완전히 바꾼 암호화화폐들이 몇몇있는데 블록체인을 쓰지 않기때문에 암호화화폐세계에서 소외되고 있는 것 같더군요.
위에서 (공개키를 통해서 비밀키를 계산할수 있다는것은 ecdsa 역암호화 수학해법을 풀었다라고 얘기할수있고 엄청난 수학천재라면 가능할수도 있을지 모릅니다 .) 라고 언급한 부분이 있는데 이에대해 며칠전에 적은 제가 적은 스팀 글 링크입니다.
제목:어떤사람이 암호화화폐의 ecdsa 수학방정식을 풀면 어떤일을 할까????
링크: https://steemit.com/kr-bitcoin/@donworry8/2tzmab-ecdsa
어떤 수학적 공식,수학적 메카니즘을 따라 비밀키를 통해 공개키가 만들어지는지도 얘기해보고싶은데 가능할지 모르겠네요. 의외로 중,고등학교 수학지식 정도만 있으면 이해할수 있습니다.
간단히 요약하자면 비밀키 1,2,3,4,5,6,7,8,9,10,11,12,13에 해당하는 공개키쌍 수열 p1,p2,p3,p4,p5,p6,....을 구하는 공식에 대해 이야기해보겠습니다.
점 p1은 ecdsa Secp256k1 규격표에 명시되어있습니다.
점 p1의 x좌표
-- 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
점 p1의 y좌표
-- 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
그럼 p2는 무었일까요 점x,y에 2를 곱하는 계산 방법이 있습니다. 요약해야 해서 여기서 적지않겠습니다. 그냥 명시하게씁니다. 2P1=p2이며
점 p2 x좌표
-- c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5
점 p2 y좌표
-- 01ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
입니다.
p3는 p2+p1라고 정의하며 그 구체적 x,y를 구하는 공식은
점 p3 x좌표
-- (((p2x-p1x) / (p2y-p1y))^2 - p1x - p2x ) MOD P 입니다.
점 p3 y좌표
-- -(((p2x-p1x) / (p2y-p1y))(p3x-p2x) + p2y ) MOD P입니다.
(나머지 구하는 P값은 특정값으로서 ecdsa Secp256k1 규격에 명시되어있습니다. )
P = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
p4는 p3+p1입니다.
위 p3좌표얻는공식에서 p4를 p3로 고치면됩니다.
위 공식들은 x3+7=y2 로 구해지는 타원곡선 그래프에서 특정 직선 방적식 y=ax+b와 교차하는 세점을구하는공식입니다. p1,p2,-p3 세점은 특정 한 직선과 타원곡선의 세 교차점입니다. 또 p1,p3,-p4역시 그렇구요 p2,p3,-p5역시 그렇습니다. a값은 기울기로 간단히 두점을 지나는 기울기 공식 (p2x-p1x)/(p2y-p1y)로 구해집니다.
위에 -p3,-p4,-p5앞에 ' -'(마이너스)표기한것은 타원곡선그래프가 Y^2이기때문에(y는 음수와 양수 두근을같는다) x축기준으로 대칭되는 그래프라서 특정 x점에대하여 y의 해가 두개있습니다. (y,-y)이때 -y하는 대칭점을 ' -'(마이너스)라고 표기합니다. (이렇게 대칭점으로 결과값을 잡아주지 않으면 점화식 수열은 p1,p2,p3이 세점에서만 돌고 돌것입니다.)
(한마다로 ecdsa의 공개키는 타원곡선공식 y2=x3+ax+b와 특정 임의의 직선그래프와 교차하는 교차점을 구하는 공식으로 만들어진 점화식 수열이됩니다. 점 p4는 'p1+p3'인 동시에 'p2 곱하기 2'와 동일한점이 됩니다. p6 = p1+p5 or p2+p4 or p3*2)
--곱셈연산(곱하기 2)에 대한 초요약 메모
(p2값은 사실 점p1에 접하는 직선의 다른 교차점에 대한 x축기준 대칭점이 바로 p2이고 이걸 p1*2이라고 정의합니다. 즉 2를 곱하는 공식은 타원곡선상의 특정 점에 접하는 직선의 다른 교차점에 x축기준으로 대칭되는 점(-y)입니다.(접할경우 교차점은 3개가 아닌 2개가되기때문))
(접할경우는 x3+7=y2(x3+ax+b=y2)이 방정식을 미분한값 dy/dx=3x^2/2y가 바로 해당 점에 접하는 직선의 기울기됩니다.)
점화식 수열로 만들어 보면
점 P(n)= P(n-1) + P(1) 이라는 식이 만들어집니다. (세점 P(n),P(n-1),P(1)은 타원곡선과의 교차점입니다.)
뭐 P(n)= P(n-2) + P(2) 이라고 해도 상관없습니다.(세점 P(n),P(n-2),P(2) 역시 타원곡선과의 교차점입니다.)
뭐 P(n)= P(n-a) + P(a) 이라고 해도 상관없는데 a는 256비트숫자(0~2^256사이 정수)가 됩니다.(아무 수나 상관없는데 1이 가장 무난합니다. 왜냐면 p1값은 명시되어있고 p1값으로부터 모든 좌표가 생성됩니다.)
공식보시면 알겠지만 그냥 곱셈,뺄셈 제곱, 사칙연산이 전부입니다.
그래서 해당 특정 결과점 px,py(<--이게 바로 공개키입니다)로부터 역연산하여 비밀키를 구하는게 가능할 것 같은데
수학자신있으면 도전해보세요 거의 불가능합니다. 이걸 풀면 당신은 모든 계좌의 비밀키를 역연산에 의해 알아낼수 있게되며 모든계좌의 돈을 송금할수있는 만능 마법키를 얻어 낼 수 있을겁니다.... 또한 수학필즈상? 같은 건 아무것도 아닌 업적을 이루게 되는 것일수도 있습니다....... 한번 해보시면 덧셈,뺄셈,곱셈 사칙연산의 세계가 얼마나 심오하고 그 동한 학교에 배웠던것은 정말 이런 사칙연산의 역연산도 못푸는 수준의 것이 었고 관련지식 탐색해보면 수학사 자체가 이와 굉장히 밀접한 연관히 있다는 것을 알아낼 수 있을겁니다.
특정임의의 비밀키값으로 공개키를 얻어내기때문에 여기에 약간의 문제점이 있을수 있습니다. 일부 공개키들은역연산이 쉽게 가능하며 비밀키를 알아내는게 가능한것이지요. 극히 일부분이지만 조심해야할 부분이기 때문에 이런 보안취약성과 어떻게하면 보안에 강한 계좌주소(공개키)를 얻어내는지에 대해서도 써보고싶군요.
여러 취약성이 있을수 있는데 그중 한가지가
임의의 비밀키값으로 공개키를 얻어낸다고 했는데....바로 이 임의의 비밀키값.....을 추측해 낼수 있다면 공개키 값을 추축해 낼수 있습니다.
공개키로 비밀키로 알아내는 수학적 매커니즘은 블가능할지 모르지만
임의의 비밀키값을 생성하는 난수알고리즘의 매커니즘은 정해져 있음으로 오히려 이게 더 쉬울수 있습니다.
공개키를 생성할때 쓰는 난수생성알고리즘이 추측가능한 알고리즘이면 공개키는 해킹당합니다.
실제로 이렇게 해킹당한 공개키들이 많이 있다고 들었습니다.
이것은 ecdsa의 역연산을 풀어서 된것이 아니라 난수알고리즘을 추측하여 방대한 db를 만들어 가능했던 것입니다.
ecdsa는 256비트를 쓰지만 난수알고리즘은 16비트32비트를 쓰기때문에 범위가 한정되어있었다는 것이 큰문제입니다. 256비트의 데이타베이스는 지구상의 모든컴퓨터를 합쳐도 안되지만 16,32비트의 데이타 베이스는 성능좋은 컴퓨터 한대로 가능합니다.
즉 32비트 난수생성기로 생성된 비밀키로 공개키로 만들면 해킹위협에 노출되는 셈이죠
이것말고도 공개키가 보안에 취약하게 될 상황이 몇몇 있습니다.
(가장 최악은 비밀키를 개인이 소유 않하고 거래소나 지갑사이트나 에 맞기거나 혹은 자신의 컴퓨터에 저장해 놓는 경우(메모든 core앱의 지갑파일이던)일지도 모릅니다)