Java일반

전자서명에 대해 다시 정리해보자.

naucika 2018. 6. 15. 17:23

매일 헛갈린 관계로 다시 정리해 보자. 


ㅁ 해싱


원문을 축약하는 것이다. 일종의 지문이라고 생각하면 편한다. 축약하는 방법은 여러가지가 있는데, 주로 SHA 를 사용한다. MD5도 같은 역할을 하는데, SHA가 길이가 더 길게 축약되어, 더 안전하다. 


해시화는 암호화와는 개념이 다르다. 암호화는 복호화가 가능한 것이고, 해시화는 그냥 원문을 축약하는 것임으로, 원문 자체를 암호화해서 송신하는 목적에 있는 것이 아니다. 전화번화 뒷자리나 계좌번호 몇자리로 대상을 확인은 하나, 그것 가지고는 원래 전화번호를 알아낼 순 없는 것과 같은 이치.


해싱은 주로 원문 그 자체를 암호화 하려는 목적이 아니라, 원문을 보낸 자의 정체?를 확인하고자 하는 목적. 


ㅁ 대칭키와 공개키


대칭키는 한개의 열쇠로 잠그고 여는걸 다 하는것이다.

공개키는 두개의 열쇠로 한개는 잠그기만 할 수 있고, 한개는 열수만 있는것. (현실에선 이런게 없지?)


대칭키는 한개의 열쇠만 뺏으면 잠근걸 열거나 할 수 있어 상대방에게 이 열쇠를 넘기는건 위험하다. (네트웍상에 캡쳐링을 당해서 키를 뺏길수도 있지)

공개키는 두개중 한개의 열쇠만 상대방에게 주기 때문에, 그걸 뺏겨도 상관이 없는것. 

그래서 상대방에게 전자서명하여 원문을 송신할때, 이 키중 한개를 같이 보내는 것이다. 


대칭키 방식은 아직까진 가장 안전하다고 하는것이 AES 임. 


ㅁ 전자서명 및 전자서명문서 송수신


1. 원문에 대한 해시코드를 만든다.

2. 자신의 공개키+개인키 를 생성한다.

2. 이 해시코드를 공개키 중 한개로 암호화 한다.

3. 원문 + 해시코드 + 공개키 를 문서에 넣는다. (전자서명 하는것)

4. 상대방에게 보낸다.


5. 상대방은 원문의 해시를 만든다. (해시방식에 대해선 알려줘야지?)

6. 상대방은 받은 해시코드를 공개키로 연다. 

7. 원문의 해시와 오픈한 해시코드를 비교해서 같은지를 확인하여, 정말 상대방이 그 사람이 보낸건지 아닌지를 확인하는 것. 



ㅁ 특이사항


공개키중 한개의 키는 잠그고, 다른 키는 연다고 했다.

이 두개의 키는 역할을 서로 변경할 수 없다. 

잠그는 키를 상대에게 보낼 수 도 있고, 오픈하는 키를 상대에게 보낼 수 도 있다.

상대에게 보낸 (Open한) 키가 public key 가 된다. (반드시 여는 역할만 하는것이 public key 는 아니다.)


ㅁ 그럼 PKI 는 또 뭐야?


이 공개키와 개인키를 만드는 방법? 알고리즘? 같은 것.

공개키와 개인키를 만드는 과정 자체를 내가 그냥 하면, 내가 만든 공개키+개인키 가 되는것이고. 

만든사람 자체를 못 믿겠다?면.. 공인된 기관에 요청하여 공개키+개인키를 만들면 된다. 

verisign 같은데 말이지.. 그럼 해당 키를 만든 체인을 이용해서, 상단 공인기관이 "이 키는 믿을만해요" 가 되고, 보험도 들게 되는것.

자신들의 방식으로 공개+개인키를 만들었는데, 복호화가 됬다거나 피해를 그로인해 피해를 입었다면 보상해줌. (물론 SHA 특성상 그게 뚤리면 기네스북 노벨상감이 되는거지)


ㅁ 추가설명


- 메일을 상대에게 보낼때, 메일을 내가 진짜로 보낸건지 확인하기 위한 용도.

  (메일 자체를 암호화 해서 보내는 것이나, 메일 송수신 프로토콜을 암호화 - SSL 하는 것과는 또 다른 용도지. 헛갈리지 말것)

- 마찬가지로 문서를 상대에게 보낼때 해당 문서가 내가 작성해서 보낸건지 확인하기 위한 용도.

- 어플리케이션을 실행할때, 정말 그게 내가 만든건지 확인하는 용도. 

  (요건 내가 만든게 맞더라도 나 자체를 신뢰해야 하는 문제가 있으니, 공인기관을 통해 sign 해서 배포하지..)

- 요즘은 blockchain 이 핫하지? 이건 아예 키 자체를 복사해서 여러사람이 서로 나눠가짐으로서, 그 키를 복제하거나 위변조할려면 모든 사람들걸 다 해야 하는 문제가 있으니 안전하지.. 저렴하고. 아주 하태하태..





음.... 맞나.. 아님 말고.. ㅎㅎㅎ

'Java일반' 카테고리의 다른 글

POI로 특정 워드 문서의 가로/세로 설정 확인하기  (0) 2018.07.02