Spring/Security

[Security] JWT - 이해하기 1(RSA)

석석's 2021. 12. 1. 20:05

RSA란?

  - 공개키로 암호화하는 시스템의 하나로 개인키 개념까지 넣어 전자서명으로 인증까지 해결하는 알고리즘이다.

    말이 너무 어려워 그림과 함께 천천히 내용을 풀어보려고 한다.

    이 개념을 이해하려면 공개키와 개인키의 의미를 알아야 하고 각 키고 문서를 암호화했을 때 어떻게 열 수 있는지 까지 알아야 한다.!!

 

 

 

 

공개키(public key)

   - 공개키는 말 그대로 공개해도 되는 키로 블로그 나 아무 사이트에나 공개가 가능하다!!

   - 공개키로 문서를 암호화하고 개인키로 이 문서를 열 수가 있다. 

     이때 공개키는 전달하려는 상대의 공개키를 사용하여 암호화해야 하고 이 암호화 문서를 풀기 위한 키도 상대방의 

     개인키 여야 한다!!

 

 

 

 

    * 공개키만 사용하였을 때 문제점 

        - 해당 메시지를 A가 보냈는지 해커가 보냈는지 알 수없다. 즉 , 전자서명에 인증 부분을 해결할 수 없게 된다.

        - 인증 부분까지 해결하기 위해 개인키로 전자서명을 해야 한다.

   

 

 

 

 

개인키(private key)

   - 개인키는 꼭 본인만 알고 있어야 하고 절대 어디서든 공개해서는 안 되는 키이다.

   - 공개키 만으로는 해결이 되지 않는 인증 부분을 해결하기 위해 사용된다! 즉 , 이 메시지는 내가 보낸 게 맞다!!라고 상대방에게 알려주어 상대방이 누구로부터 온 건지 알 수가 있게 해 준다.

   - 사진에서 B가 A의 개인키로 암 호호된 메시지를 보려면 A의 공개키로 암호화를 풀어야 한다 이때 A의 공개키로 풀리면 A가 보낸 게 맞다고 인증 처리가 된다.

 

 

   * 공개키를 이용하여 해커가 메세지를 본다면?

       - 개인키를 통한 암호화 처리는 인증에 대한 것만 처리하기에 메시지를 보건 말건은 신경 쓸 필요 없다.

         예를 들어 아래 사진에서 해커가 메시지를 봤더니 "안녕 친구?"라는 메시지가 있었다. 근데 그걸 봐서 봐서

         뭐 어쩔 거냐는 거다. 근데 비밀번호 같은 비밀 데이터를 보낼 때는 문제가 되어 다음 설명할 부분에서 해결하는

         예를 보여줄 것이다.

 

 

 

 

개인키 + 공개키 로 인증과 암호화 처리 하기

  - B가 메시지 블록을 받게되면

    A 공개키를 이용하여 개인키로 암호화된것을 품 -> 인증 해결

   

    만약 안풀린다면 A가 보낸게 아니므로 더 이상 가치가 없어 버린다.

    만약 풀린다면 이어서 B의 개인키로 암호화를 품 -> 암호화 해결

    풀어서 나온 데이터를 B가 확인함

 

 

 

 

 * 해커가 탈취할 경우?

   - 탈취하더라도 안에 데이터는 B의 개인키를 모르니 알 수가 없고 A의 공개키로 인증단계를 파괴하여 해커의 개인키로 다시 묶어서 보낸다 한들 B가 A의 공개키로 열리지 않으면 이건 조작된 것이고 A가 보낸 게 아니라고 판단할 수 있어 해커가 더 이상 무언가 할 수 있는 게 없다.