본문의 내용은 공개키.비밀키 에 대한 개념을 알고있어야 이해가능하다.
서명(Signature): 어떤 메세지가 있을때, 특정인 A가 이 메세지를 읽고 확인했다는 증거로 남겨놓는 것. 회사에서 사장님이 서류에 결재하는 것과 똑같은 컨셉이다.
이 서명은 오직 특정인 A만 남길 수 있다.
이때 A는 서명을 만들기 위한 본인만의 비밀키.공개키를 갖고 있으며 서명을 만들 때는 본인의 비밀키를 사용해서 만든다.
비밀키가 유출되면 A가 아닌 사람도 서명을 만들 수 있으므로 이 비밀키는 외부에 유출되면 안된다.
한편, 이 서명을 만드는 것은 A만 가능하지만' 이 서명을 만든 것이 A 라는 것'을 검증 하는 것은 공개키를 사용해서 할 수 있으므로 누구나 검증할 수 있다.
서명이 무엇인지 구체적으로 얘기하자면
'특정한 메세지를 비밀키로 암호화 한 것' 이 서명이다.
'나는 바보입니다.' 라는 메세지의 서명은
위 메세지를 비밀키를 가지고 암호화해서 만든 암호문이다.
서명을 만든 사람은 본인의 메세지와 함께 서명도 같이 공개한다.
수신인은 이 메세지가 정말 특정인 A가 만든것인지 확인하고 싶다. 이것을 확인하는 방법은
전달받은 서명을 A의 공개키를 사용해서 복호화하는 것이다. 그리고 본래 메세지 본문이랑 비교해서 두개가 동일하다면 이 메세지의 서명을 A가 만든 것임이 증명된다.
(이 얘기가 성립하려면 수신인이 A의 공개키를 알고 있어야한다. 이에 대한 이야기는 인증서 파트에서 다룬다.)
특정인 B는 본인이 A라고 사기를 치고싶다. 하지만 B는 A 의 비밀키를 모르기 때문에 A처럼 서명을 만들 수 없다. 따라서 사기를 칠 수 없게된다.
사기를 칠려면 자신의 공개키를 A의 공개키 인것처럼 속이면되는데, 이 부분은 인증서를 통해서 방지된다.
한편, 서명 = 메세지의 암호문
이라고했는데 이러면 메세지가 길어질수록 서명을 만드는 시간도 오래걸리고 서명의 길이도 길어진다.
그래서 실제로는 메세지를 그대로 암호화하는게 아니라 메세지에 대해 해시를 구한 후, 이 해시값을 암호화 한 것을 서명으로 사용한다.
검증을 할 때는 전달받은 메세지의 해시값을 구하고,
전달받은 서명을 공개키로 복호화한 후
해시값이랑 같은지 확인해서 검증하게 된다
인증서(Certificate) , 인증기관(CA : Certificate Authority)
앞에서 서명에 대해 설명했다. 근데 A가 만든 서명이 유효하려면 A의 공개키가 사람들에게 전달되어야하고 다른 사람이 자신이 A인척하며 자신의 공개키를 A의 공개키라고 속이는 것을 방지해야한다.
이를 위해서 사용하는것이 인증서 이고, 이 인증서를 발급해주는 기관이 인증기관이다.
A는 믿을만한 인증기관에게 인증서 발급을 요청한다. 인증기관은 A의 주민등록증.핸드폰번호 등을 활용해서 A의 신분을 확인한 후 인증서를 발급한다.
인증서에는 여러가지 내용이 들어가는데, 제일 핵심적인 내용은
이 인증서는 A의 공개키가 a임을 인증합니다.
라는 내용이다.
이때, 이 인증서도 누군가가 속여서 발급할 수 있기 때문에 인증기관은 인증기관만의 비밀키로 이 인증서에 서명을 만들어서 인증서와 함께 배포한다.
A가 비밀키 공개키를 직접 만들어서 이것에 대한 인증서발급을 요청할 수도 있다. 근데 평범한 개인이 비밀키 공개키를 생성하는것은 어렵기 때문에 인증서발급을 요청하면 이에 대한 비밀키 공개키 생성까지도 인증기관에서 만들어주기도 한다.
아무튼 이제 이 인증기관의 공개키가 다른사람에게 안전하게 공유된다고 가정하면 다른 사람이 자신이 A인척 하면서 공개키를 공유하는것을 방지할 수 있다.
A가 bob에게 메세지를 보내려한다. 그리고 bob에게 이 메세지는 A가 만든것이라는걸 서명을 통해 알리고싶다.
A는 자신의 공개키를 bob에게 공유한뒤, 비밀키로 서명을 만들면된다.
근데 Bob 입장에서는 A가 실제로 A인지 검증하지 못했기 때문에 A가 보낸 공개카 A의 공개키라고 확신할 수 없으므로 서명을 검증한다고 해서 이 메세지를 A가 만들었다고 확신할 수 없다.
이때 활용하는게 인증서다. 다시 처음으로 돌아와서, A가 Bob에게 공개키를 보낼때 공개키만 보내는게 아니라 인증서를 함께 보낸다.
Bob은 해당 인증기관의 공개키를 알고 있다. 해당 인증서에는 인증기관의 서명이 있으므로, Bob은 이 인증서가 해당 인증기관이 서명했다고 검증이 가능하다. 그러므로, 이 인증서의 내용은 인증기관이 인증했다는것이 보장되고 이 인증서에는 A의 공개키는 a 입니다. 라는 내용이 있으므로 Bob은 A의 공개키가 무엇인지 확신할 수 있다. 물론 이 이야기의 전제는 인증기관이 사기를 치지않는다는 전제가 있어야된다.그 부분은 일단 배제하고 인증기관은 신뢰할 만한 곳이라 가정하자.
이것이 인증서와 인증기관의 개념이다.
루트인증기관(Root CA)
한편 인증기관은 계층구조로 구성되는데 이에 대해 설명함.
앞에서 인증기관이 인증서를 만들때 인증기관의 비밀키를 사용해서 서명을 만든다고하였다.
그리고 이 인증서의 유효성을 검증하기 위해 인증기관의 공개키를 사용하여 서명을 검증했다.
근데 여기서 의문, 이 인증기관의 공개키가 진짜 인증기관의 공개키라는건 어떻게 확신할까?
이 인증기관의 공개키에 대한 인증서를 발급해주는 상위의 인증기관을 이용한다.
그러면 이 상위 인증기관의 유효성은 어떻게 검증할까? 그것은 이거보다 또 상위의 인증기관을 사용하는 것이다. 근데 이렇게하면 한도 끝도 없고 결국 가장 최상위의 인증기관 하나가 존재하게되는데, 이 인증기관은 자기 자신의 공개키에 대한 인증서를 스스로 발급한다.
이러한 인증기관을 Root CA라고 부른다.
'자동차 임베디드 SW' 카테고리의 다른 글
차량 진단통신 UDS 통신 ISO14229 (0) | 2022.07.31 |
---|---|
J1939 TP에 대하여 (1) | 2022.07.06 |
DTC (0) | 2022.06.08 |
SSL/TLS 통신에 대하여 (0) | 2022.05.12 |