[컴] 디지털 서명, 인증서

디지털 서명 / 디지털 인증서



이 글은 ref. 1 의 내용을 번역해서 각색했습니다.


Authenticity and Integrity

  • authenticity : 유저가 code 가 어디서 왔는지 확신할 수 있는 것
  • integrity : 발매(publication) 이후로 code 가 함부로 변경되지 않았다.를 증명해준다.


Authenticode 는 개발자들이 디지털 사인(digital signatures) 을 이용해서 개발자의 정보와 암호를 넣을 수 있다.

그러나 그것이 실행하는데 안전한 것을 보장하진 않는다.


Digital Signature

RSA public-key 암호(cipher) 같은 public-key signature 알고리즘을 이용해서 만들어진다.
public key 와 private key 가 있어야 되는데, 하나는 encryption(암호화) 에 쓰이고, 다른 녀석은 decryption(복호화)에 쓰인다.

복호화키는 암호화키에서 계산될 수 없다.

디지털 서명에서 private key 는 signature 를 만든다. 대응되는 public key 가 그것이 유효한지 확인 한다.

실제에서는 public key 알고리즘은 긴 문서들을 sign 하기엔 충분하지 않다.

시간을 줄이기 위해서, digital signature 프로토콜들은 Cryptographic Digest 를 사용한다. 이것은 document 를 한방향으로 hashing 하는 것이다. 그래서 이 hash 값을 document 대신에  sign 한다

hashing 알고리즘과 digital signature 알고리즘은 사전에 미리 일치된다.

process 는 아래와 같다.
  1. document 의 one-way hash 가 생성된다.
  2. 이 hash 를 private key 로 암호화된다. 그렇게 하므로써 document 를 sign 하는 것이된다.
  3. document 와 signed hash(encrypted hash) 가 전송된다.
  4. 수신자는 document 의 one-way hash 를 만든다.
  5. digital signature 알고리즘을 사용해서 수신자는 보낸사람의 public key 를 이용해서 signed hash 를 복호화 한다.

signed hash 의 값과 수산자가 만든 hash 값이 같으면 이 서명(signature) 은 유효하고 document 는 누구도 건들지 않은 것이다.



그런데 여기서 public key 가 정확해야 한다. public key 가 틀리다면 hash 값도 틀리게 될 것이고, 결국 document 는 틀렸다는 결론이 나오게 된다. 그래서 이 public key 의 무결성에 대한 대책으로 Certificate 이 나오게 된다.



Digital Certificates

entity 를 구별해 주는 data 의 set 이다.

certificate 은 authority entity 의 신분을 증명하고 난 이후에만 certification authority 에 의해 발행된다.

data set 은 entity 의 public cryptographic key 를 포함한다.


메시지의 sender 가 private key 로 message 를 사인할 때
수신자는 sender 의 신분을 확인하기 위해 public key 를 이용할 수 있다.
certificate 으로부터 가져오거나
message 와 함께 보내진다.
directory service 안의 어떤 곳에서 가져올 수도 있다.


Certificate Store Technology

code signing 을 위해서는 private key 와 sign 하는 사람(signer)의 정보가 필요하다.
signature 에서 사용되는 디지털 인증서(digital certificate) 는 일반적으로 signer 의 신분 정보를 제공한다. 그래서 private key 는 다른 방법으로 제공되어야 한다.

signature 는 CSP(cryptographic service provider)를 위해서 certificate chain 을 포함해야만 한다.
signed file 을 authenticated 하기 위해서 순차적으로 user 가 신용하는 root certificate 까지 가는 certificate chain 을 포함해야만 한다.

Microsoft 는 certificate store 기술은 위에서 이야기 한 복잡성을 줄이기 위해 만들었다.
이 기술을 이용하면 유저가 인증서를 얻으려고 등록할 때 private key 정보, CSP 정보, certificate 에 대한 certificate store 이름 을 구체적으로 명시한다.

certificate 은 certificate store 에 저장되고 다른 item 과 연관되어진다.

user 가 document 를 sign 하고 싶을 때, 그들은 단지 certificate store 에 있는 certificate 을 구별하기만 하면 된다.

code signing tool 은 명시된 certificate 에 기초해서 certificate, private key, CSP 에 대한 certificate chain 을 불러올 것이다.

단지 certificate 하나만 있으면 digital code signing 을 할 수 있다.


user 가 private key 와 CSP 정보를 관리해야만 하는 것에서 벗아나게 해준다.


Digital Certification(public key certificate)

위에서도 이야기 했듯이 Digital 인증은 신뢰할 수 있는 public key 의 전달을 위해 만들었다.

그래서 digital certificate 의 가장 중요한 목표중 하나는 certificate 에 들어 있는 public key 가 실제로 certificate 을 발행받게 되는 사람이나 entity 의 public key 인지를 확인해 주는 것이다.

예를 들면, certificate authority 는 user 의 이름, Alice 그리고 그녀의 public key 를 가지고 있는 특별한 메시지(certificate 정보) 를 디지털적으로 사인한다.

이 때 signed certificate information message 가 certification authority 에 의해 사인되었다는 것을 누구나 증명할 수 있는 방법으로 사인하게 된다.

certification authority 는 그것에 의해 Alice 의 public key 에 대한 신용(trust) 를 전달한다.

일반적은 digital certification 의 구현은 certificate 을 sign 하기 위한 signature 알고리즘을 포함한다.

프로세스는 아래와 같다.
  1. Alice 는 certification authority 에 자신의 이름, public key를 첨부해서 certification 요청을 보낸다.
  2. certification authority 는 Alice 의 request 로 부터 특별한 메시지(m)를 만든다. 이것이 certificate 의 대부분의 data 를 구성한다.
  3. certification authority 는 자신의 private key 로 message m 을 sign 한다. 이렇게 sign 을 하면서 seperate signature (sig) 를 얻는다.
  4. 그리고 나서, certification authority 는 message m 과 그리고 signature sig 를 Alice 에게 돌려준다. 이 두개가 함께 하나의 certificate 를 구성한다.
  5. Alice 는 그녀의 public key 에 대한 trust 를 전달하기 위해 certificate 을 Bob 에게 보낸다.
  6. Bob 은 certification authority 의 public key 를 사용해서 signature sig 를 확인한다. 
  7. 만약 signature 가 확인되면, 그는 Alice 의 public key 를 수락한다.


누구나, 아무때나, 어떤 비밀스런 정보에 대한 접근없이도, certificate 이 certification authority 에 의해 sign 되었다는 것을 증명할 수 있다.

Bob 은 certification authority 의 public key 에 접근하기 위해 certification authority 의 certificate 의 복사본만 있으면 된다.


certificate 은 그것을 발행한 certification authority 에 의해 명시된 특정 시간 동안에만 유효하다. certificate 은 시작 날짜와 expiration 날짜에 대한 정보를 갖고 있다.

certification authority 는 자신이 발행한 어떤 certificate 도 폐지할 수 있고, 폐지된 certificate 들의 list 를 유지한다.

이 list 는 certificate 폐지 리스트(certificate revokation list, CRL)라고 부르는데, certification authority 에 의해 발행 된다. 그래서 아무나 주어진 certificate 의 유효성을 알아낼 수 있다.




References

  1. Introduction to Code Signing (Windows)





댓글 없음:

댓글 쓰기