프로그래밍/블록체인

암호화 방식 총정리(feat.비트코인)

브래드 킴 2022. 2. 11. 19:04
728x90

흔히 알려져 있는 암호화 방식을 총정리 해보고자 한다.

 

1.먼저 암호화방식은 양방향과 단방향으로 나뉠 수 있다. 양방향이라는 것은 한쪽방향에서는 암호화를 하고 한쪽방향에서는 복호화를 하는 방식을 말한다. 단방향이라는 것은 복호화는 없이 암호화만 진행하는 것을 말한다.

 

1)단방향에서 어떻게 복호화가 없을수가 있지? 라고 생각할 수 있으나, 단방향의 방식은 단순하다. 예를들어) 사용자가 회원가입을 할때 비밀번호를 저장함에 있어 특정 암호화키를 사용하여 암호화된 hash 값으로 데이터베이스 서버에 저장을 한다. 그 이후 로그인을 할 때마다 해당 값을 복호화하여 비교 하는 것이 아니라, 로그인 할 때도 입력값을 같은 암호화키를 통해 hash로 만든뒤, 데이터베이스에 있는 hash와 비교하는 절차를 거친다. 이렇게 하면 굳이 복호화를 하지 않아도 사용자가 입력한 값이 맞는지 안맞는지 검증이 가능하다. 같은 암호화키를 사용하면 같은 입력값을 입력해야지만 동일한 hash값이 튀어나오기 때문이다.

 

2)양방향 암호화에는 크게 방식이 두가지가 있다. 대칭키 방식과 비대칭키 방식.

 

-대칭키 : 암호화, 복호화 모두 동일한 키 사용(대칭). 해당키는 공개되어서는 안되는 비밀키로 관리되어야 하고, 암호화 주체와 복호화 주체간에 해당 키를 주고받아야 하는 상황이 발생.

예를들어)

 열쇠로 잠궈놓았거나, 비밀번호가 걸려있는 금고가 이에 해당될 것이다. 잠글때와 열때 모두 같은 키를 사용을 하고, 금고를 누군가에게 보내주었다고 하더라도, 이것을 열게 하려면 열쇠키를 보내주어야 한다. 금고가 안전하게 도착했다고 하더라도, 열쇠가 운송도중에 분실되거나 누가 훔쳐간다면 보안에 문제가 생기게 되는 것이다.

 누군가한테 데이터를 보낼때에 대칭키를 사용하면, 데이터를 암호화하여 전송한 후에 복호화를 위해 해당 키를 운송편으로 데이터를 받는 그 사람에게 보내줘야 하는 상황이 발생한다. 그렇지 않으면 암호화된 데이터를 열어볼 수 있는 방법이 없기 때문이다.

 

-비대칭키 : 암복호화시에 각각 공개키, 비밀키(개인키)를 두고, 이 두 키중 하나는 암호화 키로 또다른 하나는 복호화 키로 사용되는데, 공개되는 것은 공개키 공개되지 않는 것은 개인키 또는 비밀키라 한다. 암복호화시 보통은 공개키가 암호화 모듈로 사용된다. 여기서 공개키는 공개되어도 무관하므로, 암복호화시 대칭키와 같이 키를 주고 받는 상황이 필요가 없다. 왜 그러한지 아래의 예시를 봐보겠다.

예시) https통신은 SSL인증서라는 것을 사용해 사용자가 서버에 보내는 데이터들을 비대칭 방식으로 암호화 처리를 한다. 먼저, 사용자가 웹서버의 홈페이지에 접근을 하면 서버는 SSL인증서를 사용자의 웹브라우즈에 내려준다. 그 안에 공개된 암호화키가 들어있고, 이것을 사용해 사용자가 보내고자 하는 데이터를 암호화하여 서버에게 보내면, 서버는 공개된 암호화키와 짝이 되는 복호화 비밀키를 사용하여 해당 암호화문을 복호화한다. 이런과정을 통해 사용자가 해당 웹서버에서 로그인도 하고, 각종 정보들을 안전하게 주고 받을 수 있게 되는 것이다. 결국 발신자는 수신자의 (비밀키/공개키)중에 공개키를 가지고 데이터를 암호화 한후에 수신자에게 보내면, 수신자는 본인의 비밀키를 통해 해당 데이터를 복호화하여 볼 수 있게 된다.

 

2.비트코인에서 암복호화 방식은?

여기서 다소 혼선이 있는 부분은 구글링을 하다보면, 비트코인은 개인키를 통해 트랜잭션을 암호화하고, 공개키를 통해 복호화한다라고 블록체인 관련 블로그에 설명이 되어 있다. 개인키로 암호화를 시키고, 공개키인 주소를 네트워크상에 공개함으로서, 복호화 및 메시지 공유가 가능하도록 하게 한다는 것이다.

 

그러나, 비트코인에서 개인키의 용도는 암호화라기 보다는 디지털 서명을 생성하는 기능이다. 네트워크에서 비트코인을 전송할때에 개인키를 사용하여 송신자의 서명을 남기는 것이다. 

 

그런데, 잠금/해제 스크립트 관련하여, 공개키이자 잠금키인 수신자의 주소로 트랜잭션을 암호화하고, 수신자의 개인키를 통해 이를 복호화 하는 것으로 해석 여지가 있을 수 있으나, 여기서 암호화란 누가 볼 수 없도록 하는 그런 일반적인 암호화의 개념이 아닐 것이다.

 

왜냐하면 공개키로 암호화 시켰다고 하더라더라도, 해당 거래에 대한 정보는 누구든 열람할 수가 있을 테니까. 여기서 말하는 암호화란 잠금/해제 스크립트의 의미 그대로, 누군가에게 돈을 투명한 상자 안에 지급하되 주인만 꺼내어 쓸 수 있도록 잠궈 놓은 것이다. 주인만이 해제키를 가지고 그것을 열어서 사용할 수가 있게 될 것이다.

 

다시 정리하면 비트코인에서의 암호화, 데이터를 암호화 시킴으로서 다른사람이 못보도록 하는 그런 암호화의 개념이 아니라, 소유권에 대한 내용을 명시하고 소유권을 주장하기 위하여 사용되는 개념이지 일반적인 공개키/개인키의 개념은 아닌 것으로 보인다.

 

728x90