Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

공개키, 대칭키, 전자서명

2016. 6. 28. 09:42programming/컴퓨터 일반

728x90

비밀키 : 이 키에 따라 암호화된 결과가 달라지기 때문에 키를 모르면 복호화를 못함


대칭 키 : 동일한 키로 암호화, 복화를 같이 할 수 있는 방식

암호를 주고 받는 사람들 사이에서 대칭키 전달은 어려움...


공개키는 A키로 암호화하면 B 키로 복호화

B 키로 암호화하면 A키로 복호화

2개의 키중 하나를 비공개키(개인키, 비밀키, private Key)

나머지 하나를 공개키.


1. 상대방에게 내 공개키를 알려 준다.

2. 상대방은 내게 자신의 공개키를 알려준다.

3. 상대방은 나의 공개키를 이용해 정보를 암호화하여 나에게 보낸다.

4. 나는 내 개인키로 이 암호화 정보를 복호화한다.

5. 내 정보를 상대방의 공개키로 암호화해서 보낸다.

6. 상대방은 자신의 개인키로 내 정보를 복호화한다.


개인키는 본인만 갖고있으며, 공개키만으로는 복호화가 불가능.

공개키가 유출되어도 비공개키(개인키)가 있어야 복호화가 가능하기 때문에 안전.


인증(전자서명)

비공개키를 갖고 있는 사람이 자신의 정보를 암호화하여 자신의 공개키를 갖고있는 사람에게 전송

누구나 복호화가능. 내가 전송한 정보를 받은사람의 공개키로 복호화가 가능하면 비밀키를 갖고있는 사람이 전송했다는 것을 보증할 수 있음.


표준SSL


1. 나는 암호문을 주고 받을 상대에게 접속 요청을 한다.

2. 상대는 자신의 공개키를 나에게 보낸다.

3. 나는 암호화할 때 사용할 대칭키를 상대의 공개키로 암호화해서 보낸다.

4. 상대는 내가 보낸 암호문을 자신의 개인키로 풀어서 대칭키를 알아낸다.

5. 이제 대칭키를 사용해 서로 암호문을 주고 받는다.


공개키 기법으로 대칭키를 주고 받아 해독키가 노출될 일이 없고, 실제 암호화와 해독 작업은 대칭키로 하니 비용도 적게 듦.



1. 인터넷 사이트는 자신의 정보와 공개키를 인증기관에 제출

2. 인증 기관은 검증을 거친 후 사이트 정보와 공개키를 인증기관의 개인키로 암호화한다. -> 사이트 인증서

3. 인증 기관은 웹 브라우저에게 자신의 공개키를 제공.

4. 사용자가 웹브라우저로 사이트에 접속하면 사이트는 자신의 인증서를 웹 브라우저에게 보냄.

(인증기관의 개인키로 암호화한 사이트의 정보와 공개키가 들어있음)


5. 웹브라우저는 인증 기관의 공개키로 서버 인증서를 해독하여 검증.

6. 이렇게 얻은 사이트 공개키로 대칭키를 암호화하여 보냄.

7. 사이트는 자신의 개인키로 암호문을 해독해서 대칭키를 얻음.

8. 이제 대칭키로 암호문을 주고 받을 수 있음.




출처 : http://minix.tistory.com/397



1.3. SSL이란 무엇이며 인증서(Certificate)란 무엇인가?

SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다.

  1. [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)

  2. [웹서버] Public Key를 인증서와 함께 전송한다.

  3. [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.

  4. [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다.

  5. [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.

  6. [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.

  7. [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.

여기서 간단한 개념 정도는 알아두어야 할 것이다.

1.3.1. 개인키/공개키(Private Key/Public Key):

Private key/Public Key를 이용한 암호화는 하나의 키로 암호화하고 나머지 다른 하나로 복호화할 수 있도록 되어있다. 이해하기 어렵겠지만 필자를 믿어라. (역주:독자가 PKI(Public Key Infrastructure)에 대해서 잘 모른다면 이에 대한 간단한 문서를 읽어보기를 권한다) 앞에서 암호화한 키로만 암호화를 할 수 있는 것이 아니라 반대 방향으로 복호화한 키로도 암호화할 수도 있다.(당연히 앞에서 암호화한 키가 이번엔 복호화하는 키가 되는 것이다) 이러한 키쌍은 소수(prime number)로부터 생성되며, 그 길이(Bit 단위)는 암호화의 강도를 나타낸다.

Private Key/Public Key는 이러한 키쌍을 관리하는 방법이다. 한개의 키는 안전한 장소에 자기만 알 수 있도록 보관하고(Private Key) 다른 하나는 모든 사람에게 퍼뜨리는 것(Public Key)이다. 그렇게 하면 그 사람들이 당신에게 메일을 보낼 때 암호화해서 보낼 수 있으며, 당신만이 그 암호를 풀 수 있다. 반대로 다른 사람에게 메일을 보낼 일이 있으면 Private Key를 이용해 암호화 할 수 있다. 그러면 그 사람들은 복호화해서 볼 수 있다. 그러나 이 방법은 모든 사람이 Public Key를 가지고 있어야 하기 때문에 그리 안전한 방법이 아니다. (역주:오히려 역효과를 일으킬 수 있다. 단순하게 메시지, 파일에 암호화, 서명을 할 생각이면 PGP나 GnuPG를 권한다)

1.3.2. 인증서(Certificate):

당신과 접속해있는 사람이나 웹 사이트가 믿을 수 있는지 어떻게 판단할 수 있을까? 한 웹사이트 관리자가 있다고 가정하자. 그 사람이 당신에게 이 사이트가 믿을만하다고 (심각할 정도로) 열심히 설명했다. 당신이 그 사이트의 인증서를 설치해 주기를 바라면서 말이다. 한두번도 아니고 매번 이렇게 해야한다면 귀찮지 않겠는가?

인증서는 여러 부분으로 이루어져있다. 아래는 인증서 속에 들어있는 정보의 종류를 나타낸 것이다.

  1. 인증서 소유자의 e-mail 주소

  2. 소유자의 이름

  3. 인증서의 용도

  4. 인증서 유효기간

  5. 발행 장소

  6. Distinguished Name (DN)

    - Common Name (CN)

    - 인증서 정보에 대해 서명한 사람의 디지털 ID

  7. Public Key

  8. 해쉬(Hash)

SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다는 것이다. 이것은 마치 트리(Tree)와 같은 구조를 이루면서 인증서끼리 서명하게 된다. 그러면 최상위 인증서는? 이 인증서를 발행한 기관을 Root Certification Authority(줄여서 Root CA)라고 부르며, 유명한 인증 기관(역주:Verisign, Thawte, Entrust, etc)의 Root CA 인증서는 웹브라우저에 기본적으로 설치되어 있다. 이러한 인증 기관은 자신들이 서명한 인증서들을 관리할 뿐만 아니라 철회 인증서(Revoked Certificate)들도 관리하고 있다. 그러면 Root CA의 인증서는 누가 서명을 했을까? 모든 Root CA 인증서는 자체 서명(Self Signed)되어 있다.

1.3.3. 대칭키(The Symmetric key):

Private Key/Public Key 알고리즘은 정말 대단한 알고리즘이지만, 비실용적이라는 단점이 있다. 비대칭(Asymmetric)이란 하나의 키로 암호화를 하면 다른 키가 있어야 복호화를 할 수 있는 것을 뜻한다. 즉, 하나의 키로 암호화/복호화를 할 수 없다는 말이다. 대칭키(Symmetric Key)는 하나의 키로 암호화/복호화를 하게 된다. 대칭키를 사용하면 비대칭키보다 훨씬 빠르게 암호화/복호화를 할 수 있다. 그렇지만 속도 때문에 대칭키를 이용한다는 것은 너무 위험하다.

만약 당신의 적이 키를 입수해 버리면 여태까지 암호화된 정보가 모두 무용지물이 되어버리게 된다. 그래서 대칭키 알고리즘을 사용한 키를 상대방에게 전송하려면 인터넷과 같은 통로는 너무나도 위험하기 때문에 직접 손으로 전달해야만 한다. 귀찮지 않은가? 해결책은 대칭키를 비대칭키로 암호화시켜서 전송하면 된다. (역주:위에서 살펴본 웹서버와 브라우저의 관계에서 볼 수 있었다) 자신의 Private Key만 안전하게 관리하면 Public Key로 암호화되어 안전하게 전송할 수 있다.(여기서 보안은 죽음이나 협박 등을 제외한다) 또한 대칭키는 매번 랜덤으로 선택되는데, 이렇게되면 만약 대칭키가 누출되어도 다음번에는 다른 키가 사용되기 때문에 안전하다.

1.3.4. 암호화 알고리즘(Encryption Algorithm):

암호화 알고리즘은 대칭이든 비대칭이든 간에 상당히 많은 종류가 있다. 일반적으로 암호화 알고리즘으로 특허를 낼 수 없다. 만약 Henri Paincare가 암호화 알고리즘으로 특허를 낸다면 Albert Einstein으로부터 고소당할 수 있는 것이다. 단, USA에서는 암호화 알고리즘으로 특허를 낼 수 있다.(역주:또한 군사법으로 보호받게 된다.) OpenSSL의 경우에는 암호화 알고리즘으로 특허를 낼 수 없고, 군사법이나 보안법에 저촉되지 않는 국가에서 개발되고 있다.

실제로 알고리즘이 어떻게 사용되는지 살펴보자. 웹서버와 브라우저는 서로 통신을 하는 동안 서로 어떤 알고리즘을 사용할 수 있는지 확인하게 된다. 다음에 서로 이해할 수 있는 일반적인 알고리즘을 선택한 후 통신이 이루어지게 된다. OpenSSL은 컴파일해서 삽입할 알고리즘을 택할 수 있다. 그렇게 하면 암호화 알고리즘에 제한을 걸고 있는 국가에서도 사용할 수 있게 된다.

1.3.5. 해쉬(Hash):

해쉬는 해쉬 함수에 의해 만들어지는 숫자다. 이 함수는 단방향으로 연산되는 함수다. 즉, 한번 해쉬함수로 원본으로부터 해쉬값을 생성했다면, 해쉬값으로부터 원본 메시지를 알아내는 것이 불가능하다. 해쉬의 용도는 원본 메시지가 손상이 되었는지를 알아내는데 있으며, 해쉬값을 변경시키지 않고 원본을 조작하는 것은 극히 어렵다. 그래서 해쉬 함수는 패스워드 메커니즘을 비릇한 소프트웨어의 손상 유무(MD5 sum)를 가리는데도 이용할 수 있으며, 메시지의 손상을 방지하기 위해 널리 쓰이고 있다.

1.3.6. 서명(Signing):

서명은 특정 메시지를 내가 작성했다는 것을 인증하는 역할을 한다. Text가 될 수도 있고, 인증서 등등이 될 수 있다. 메시지에 서명하기 위해서는 아래의 순서를 따라야 한다.

  1. 해쉬 생성

  2. Private Key로 해쉬 암호화

  3. 암호화된 해쉬와 서명된 인증서를 메시지에 추가

  4. 받는 사람은 따로 해쉬를 생성

  5. 받은 메시지에 포함된 해쉬를 Public Key를 이용해서 복호화

  6. 4, 5번 과정에서 생성된 해쉬를 비교

1.3.7. 암호문(Pass Phrase):

암호문(Pass Phrase)은 기존의 패스워드(Password)를 확장한 시스템이다. 예전의 Unix 시스템의 암호(Password)는 8자가 한계였다. 암호문이라는 것은 단순히 암호의 한계가 더 길어졌다는 것을 뜻한다. 당연히 8자가 한계인 것보다 보안이 강력하다. 최근의 Unix 시스템은 MD5를 사용하고 있기 때문에 암호의 길이 제한이 없어졌다.

(역주:암호문은 SSL에서 키가 누출되었을 경우, 최종 보안 장치이기 때문에, 중요한 키에는 반드시 새겨두어야 한다.)




출처 : https://wiki.kldp.org/HOWTO/html/SSL-Certificates-HOWTO/x70.html





공개 키 암호화 이해

 

마지막으로 수정된 항목: 2005-05-19

이 항목에서는 특히 메시지 보안과 관련된 공개 키 암호화 요소에 대해 자세히 설명합니다. 항목을 좀 더 자세하게 이해하도록 참조할 수 있는 기타 정보 소스도 제공합니다.

암호화는 코드 및 암호를 통해 정보를 보호하는 기술로 메시지 보안의 기본 영역입니다.

간 략하게 말하면 코드는 정보 변경 방법을 모르는 상태로 읽을 수 없도록 하기 위해 정보를 체계적으로 변경하는 프로세스입니다. 초기의 가장 간단한 코드 중 하나(Caesar 암호라고 함)는 알파벳을 사용하여 정해진 수만큼 모든 문자를 자리 이동하는 방식을 사용했습니다. 보낸 사람 및 받는 사람은 모두 얼마나 많은 문자가 자리 이동되었는지 알고 있으므로 이 코드를 사용하여 자신들은 이해할 수 있지만 다른 사람은 이해하지 못하도록 정보를 변경했습니다. 정보를 코드로 변경하는 프로세스가 암호화이며 코드를 다시 되돌리는 프로세스가 암호 해독입니다. 원본 메시지를 "plaintext"라고 하고 변경된 메시지를 "ciphertext"라고 합니다. plaintext에서 ciphertext로 변경하는 데 사용된 정보를 키라고 하며 키가 정보 변경 시 사용한 특정 방식을 알고리즘이라고 합니다.

note참고:
이 내용에서 plaintext(또는 cleartext)를 전자 메일 메시지의 형식을 나타내는 일반 텍스트(plain text)와 혼동해서는 안됩니다. 여기서 일반 텍스트(plain text)는 메시지 형식을 HTML 형식이나 서식 있는 텍스트(RTF)와 구분하는 데 사용됩니다. 메시지 보안 관련 내용에서 plaintext는 텍스트가 암호화되지 않음을 나타내기 위해 ciphertext와 구분하여 사용됩니다.

예를 들어 보낸 사람이 이 방법을 사용하여 메시지를 보호할 때 보낸 사람은 plaintext의 모든 문자 A 인스턴스가 키에 의해 ciphertext의 문자 D로 변경될 것임을 알고 있습니다. 즉 plaintext의 모든 문자 B 인스턴스는 ciphertext의 문자E로 변경되는 식입니다. "문자를 세 번 앞으로 자리 이동"이라는 알고리즘을 가진 이 키를 사용하여 plaintext의 단어 "help"는 ciphertext의 "khos"로 암호화될 것입니다.

받는 사람이 ciphertext 메시지를 받으면 받는 사람은 키를 통해 정보를 해독하여 이 메시지를 plaintext로 다시 변환합니다. 이 경우 문자를 세 번 뒤로 자리 이동하여 변경 사항을 되돌립니다.

이 예제에서는 키를 아는 모든 사람이 이 키를 사용하여 메시지를 읽고 암호를 해독할 수 있으므로 보낸 사람 및 받는 사람은 모두 키를 비밀로 유지해야 함을 보여 줍니다. 키를 잃어버리면 암호화가 소용없게 됩니다. 또한 알고리즘의 길이도 중요합니다. 권한 없는 사람이 암호화된 ciphertext를 취하여 ciphertext에 기반한 키를 판별함으로써 암호 해독을 시도할 수 있습니다.

보낸 사람 및 받는 사람 모두 동일한 키를 사용해야 합니다. 이러한 유형의 암호화는 양측이 동일한 키를 사용하므로 "대칭 키" 암호화라고 합니다.

이 예제는 간단하지만 암호화의 핵심 개념 및 기능을 설명합니다. 최근에는 암호화 기술이 한층 더 개선되고 향상되었습니다.

1976년 Whitfield Diffe와 Martin Hellman은 공개 키 암호화를 만들었습니다. 공개 키 암호화는 암호화 및 암호 해독 프로세스를 근본적으로 변경하여 커다란 혁신을 가져왔습니다.

Diffe 와 Hellman은 하나의 공유 비밀 키가 아닌 두 개의 키를 사용할 것을 제안했습니다. 하나는 비밀로 유지되는 "개인 키"로서 양쪽에 공유되지 않고 한 쪽만 보유합니다. 두 번째 키는 "공개 키"로서 비밀이 아니며 널리 공유될 수 있습니다. 두 키 또는 "키 쌍"이라고 하는 이 키들은 암호화 및 암호화 해독 작업에서 함께 사용됩니다. 키 쌍은 특별한 상호 관계를 가지고 있어서 각 키는 상대 키와 짝을 이루어 결합했을 때만 사용될 수 있습니다. 이 관계는 키를 서로 배타적으로 짝을 이루어 묶습니다. 즉 공개 키와 해당 개인 키가 함께 짝을 이루고 이들은 다른 어떤 키와도 연관되지 않습니다.

이러한 짝 편성이 가능한 것은 공개 키 및 개인 키 알고리즘 간의 특수한 수학적 관계 때문입니다. 키 쌍은 서로 수학적인 연관이 있으므로 키 쌍을 함께 사용하면 대칭 키를 두 번 사용하는 것과 같은 결과를 얻을 수 있습니다. 키들은 함께 사용되어야 합니다. 각 개별 키를 사용하여 자체 작업을 실행 취소할 수 없습니다. 즉 각 개별 키의 작업은 단방향 작업으로서 키를 사용하여 자체 작업을 되돌릴 수 없습니다. 또한 양쪽 키에 사용되는 알고리즘은 한 키를 사용하여 쌍의 반대편 키를 판별할 수 없도록 디자인되어 있습니다. 따라서 공개 키를 통해 개인 키를 판별할 수 없습니다. 그러나 키 쌍이 가능하게 하는 수학으로 인해 키 쌍에는 대칭 키에 없는 한 가지 단점이 발생했습니다. 사용된 알고리즘은 암호화된 정보를 무작위 공격에 알려진 공개 키를 사용할 수 없도록 매우 강력해야 합니다. 공개 키는 그 수학적 특성 및 단방향 특성을 통해 공개적으로 알려져 있다는 점을 보완하여 인코딩된 정보를 쉽게 해독하지 못하도록 합니다.

이 개념을 위의 예제에 적용하는 경우 보낸 사람은 공개 키를 사용하여 plaintext를 ciphertext로 암호화합니다. 그런 다음 받는 사람은 개인 키를 통해 ciphertext를 암호 해독하여 plaintext로 되돌립니다.

키 쌍에서 공개 키와 개인 키 사이의 특별한 관계 때문에 한 사람이 각각의 개인과 다른 키를 사용하지 않고 많은 사람들과 함께 동일한 키 쌍을 사용하는 것이 가능합니다. 개인 키가 비밀 상태로 있는 동안 무제한의 사람들이 공개 키를 제공 받아 안정적으로 사용할 수 있습니다. 하나의 키 쌍을 많은 사람들이 사용할 수 있게 되면서 키 관리 요구 사항이 현저히 줄어들어 암호화 작업이 훨씬 유용해졌기 때문에 암호화의 새로운 지평이 열리게 되었습니다. 각 개인마다 하나의 비밀 키를 만들 필요가 없으며 한 명의 사용자가 하나의 키 쌍을 많은 사람들과 공유할 수 있습니다.

공 개 키 암호화는 메시지 보안의 기본 요소입니다. 공개 키 암호화 이전의 키 관리는 번거로운 일이었기 때문에 공개 키 암호화를 사용하지 않았을 때는 실질적인 메시지 보안 솔루션이 존재했다고 할 수 없습니다. 공개 키 암호화의 기본 개념을 이해하면 다음 단계에서는 이 개념들이 메시지 보안을 가능하게 하는 방법을 이해할 수 있습니다.

이전 섹션에서 설명된 것처럼 디지털 서명의 핵심은 메시지를 보낸 사람을 고유하게 식별하는 능력입니다. 키 쌍 관계의 상호적인 특성으로 인해 공개 키 암호화를 통해 고유한 식별이 가능해집니다.

키 쌍에서 개인 키는 한쪽에만 속해 있기 때문에 개인 키가 사용된 것으로 나타난 모든 경우 해당 키의 소유자만이 그것을 사용했다고 결론지을 수 있습니다. 이와 같이 개인 키 사용은 서명의 소유자만 실제로 할 수 있기 때문에 종이 문서에 하는 서명과 유사합니다. 개인 키를 사용하여 소유자의 현재 상태를 확인하는 것과 마찬가지로 서명을 사용하여 소유자의 현재 상태를 확인합니다.

암 호화 및 암호 해독 작업에서 키 쌍이 성공적으로 사용되면 그 쌍의 개인 키는 작업의 한 부분에만 사용되었다고 볼 수 있습니다. 공개 키가 하나의 개인 키에만 묶여 있기 때문에 해당 공개 키를 사용하여 연관된 개인 키를 식별할 수 있습니다. 암호화 및 암호 해독 작업에서 특정 공개 키가 성공적으로 사용되면 해당 개인 키가 작업의 한 부분에만 사용된 것으로 유추됩니다. 키 소유자만 개인 키를 사용할 수 있으므로 이는 키 소유자만 암호화 및 암호 해독 작업의 일부를 수행할 수 있음을 의미합니다.

개인 키를 사용하여 ID를 증명하는 것은 암호화 및 암호 해독 작업 전체가 성공적으로 수행되었음을 나타냅니다. 전체 작업은 개인 키를 사용하여 plaintext가 ciphertext로 암호화되고 해당 공개 키를 가지고 암호 해독 작업을 하여plaintext로 되돌리는 것을 의미합니다. 이 작업이 성공적으로 수행되면 특정 개인 키 사용이 증명되는 것입니다.

성공적인 암호화 및 암호 해독 작업을 위해서는 암호화 및 암호 해독 작업 전의 plaintext는 암호화 및 암호 해독 작업 후의 plaintext와 일치해야 합니다. 양쪽의 plaintext는 직접 비교되어야 하며 정확하게 일치해야 합니다. 비교 및 유효성 확인에 사용되는 제어가 있어야 합니다.

전자 메일에서 이 제어는 실제 메시지입니다. 메시지는 받는 사람 및 보낸 사람 모두에게 사용 가능하므로 편리한 제어 요소입니다.

비교 작업에 사용하기 위해 메시지는 완성된 텍스트의 수치적 표현인 "해시"로 변환됩니다. 일치하는 메시지 텍스트는 일치하는 해시 값을 나타냅니다.

메시지를 보낼 때 메시지의 해시 값을 가지고 개인 키와 결합하면 개인 키 소유자는 바로 자신이 메시지를 보낸 당사자임을 입증하게 됩니다.

보 낸 사람의 개인 키에 대한 해시 값을 암호화함으로써 개인 키와 메시지의 결합이 이루어지며 이 과정에서 실제 디지털 서명이 만들어집니다. 보낸 사람의 전자 메일 시스템의 구성 방법에 따라 디지털 서명은 메시지 아래쪽에 첨부되어 "암호화하지 않고 서명한" 메시지를 만들거나 결과가 이진 첨부 파일로 원본 메시지와 결합되여 "불투명하게 서명한" 메시지를 만듭니다.

디지털 서명은 원본 메시지에 첨부 파일로 추가되기 때문에 S/MIME을 지원하지 않는 전자 메일 클라이언트에서 암호화하지 않고 서명한 메시지를 읽을 수 있습니다. 서명은 무시되고 비S/MIME 클라이언트에서 원본 메시지를 표시합니다. 그러나 메시지를 확인할 방법이 없습니다. 즉 서명 되지 않은 메시지와 근본적으로 같습니다. 암호화하지 않고 서명한 메시지의 단점은 메일 게이트웨이가 개입하여 메시지를 변경할 가능성이 높으며 이로 인해 서명이 무효화된다는 점입니다.

반면 메시지 및 디지털 서명은 불투명하게 서명된 메시지에서 하나의 이진 첨부 파일로 처리되므로 전송 중에 변경될 가능성이 낮습니다. 그러나 S/MIME 클라이언트만 첨부 파일을 읽을 수 있습니다. 비S/MIME 클라이언트가 불투명하게 서명한 메시지를 받으면 메시지를 읽을 수 없습니다.

불 투명하게 서명한 메시지는 전자 메일 시스템에서 전자 메일 전송 중 메시지 본문을 변경하는 문제를 해결하기 위해 만들어진 것이기도 합니다. S/MIME 표준을 준수하는 현재 전자 메일 솔루션은 메시지 본문을 변경하지 않습니다. 그러나 불투명하게 서명한 전자 메일 메시지를 읽지 못하는 클라이언트도 많습니다. 따라서 암호화하지 않고 서명한 메시지를 보내는 것이 좋습니다.

메 시지를 받으면 디지털 서명이 검색되고 보낸 사람의 공개 키가 암호화 작업에 적용되어 메시지의 원본 해시 값이 생성됩니다. 그런 다음 이 해시 값과 받은 메시지의 해시 값이 비교될 수 있습니다. 하나의 개인 키만 공개 키에 대응할 수 있고 공개 키의 소유자만이 공개 키를 사용하여 해시 값을 암호화할 수 있으므로 공개 키를 가지고 해시의 암호를 해독하면 개인 키 소유자가 해시 값을 암호화했음을 나타냅니다. 해시 값은 메시지 텍스트를 수치적으로 표현한 것이므로 암호화된 해시 값이 받은 메시지의 해시 값과 일치하면 보낸 메시지 텍스트가 받은 메시지 텍스트와 일치함을 뜻합니다. 개인 키 소유자만 메시지를 보낼 수 있다는 사실과 연결해 보면 받는 사람은 키 소유자만이 메시지를 보냈음을 확신할 수 있게 되어 인증 및 거부할 수 없음 기능이 제공됩니다. 이는 또한 메시지가 변경되지 않았음을 나타내므로 데이터 무결성이 제공됩니다. 해시 값이 일치하지 않았다면 받는 사람은 메시지가 전송 중 변경되었거나 사용된 개인 키와 일치하지 않는 공개 키가 사용되었음을 알 수 있습니다. 두 경우 모두 받는 사람은 메시지가 유효하지 않고 신뢰할 수 없다는 것을 알게 됩니다.

따라서 공개 키 암호화가 디지털 서명을 구성하는 보안 서비스를 제공하는 방식을 알 수 있습니다.

다음 그림은 공개 키 암호화의 지원 요소가 추가된 서명 순서를 보여 줍니다.

35451fb8-5e11-4d67-ba6e-e5d4da6febca
  1. 메시지가 캡처됩니다.
  2. 메시지의 해시 값이 계산됩니다.
  3. 보낸 사람의 개인 키가 검색됩니다.
  4. 보낸 사람의 개인 키를 사용하여 해시 값이 암호화됩니다.
  5. 암호화된 해시 값이 디지털 서명으로 메시지에 추가됩니다.
  6. 메시지가 전송됩니다.

다음 그림은 공개 키 암호화의 지원 요소가 추가된 메시지의 확인 순서를 보여 줍니다.

d1b14a27-5cfb-4df2-89f7-990219378716
  1. 메시지가 수신됩니다.
  2. 메시지에서 암호화된 해시 값이 포함된 디지털 서명이 검색됩니다.
  3. 메시지가 검색됩니다.
  4. 메시지의 해시 값이 계산됩니다.
  5. 보낸 사람의 공개 키가 검색됩니다.
  6. 보낸 사람의 공개 키를 사용하여 암호화된 해시 값의 암호가 해독됩니다.
  7. 암호가 해독된 해시 값이 수신 시 생성된 해시 값과 비교됩니다.
  8. 값이 일치하면 메시지가 유효합니다.

이 절차는 디지털 서명에 핵심 보안 서비스인 인증, 거부할 수 없음 및 데이터 무결성을 부여하는 기능을 공개 키 암호화를 통해 어떻게 제공하는지 보여 줍니다.

암 호화는 공개 키 암호화의 핵심 기능이기 때문에 디지털 서명과는 달리 공개 키 암호화와 메시지 암호화의 관계는 일반적으로 매우 간단합니다. 그러나 키 쌍을 사용하여 메시지를 암호화하고 암호 해독하는 것만으로 메시지 암호화가 완성되지는 않습니다. 키 쌍은 메시지 암호화에만 사용되고 전체 메시지에는 사용되지 않습니다.

메시지 암호화의 목적은 인증된 받는 사람만 메시지를 볼 수 있도록 하는 것이므로 받는 사람 각각의 개인 키는 그러한 서비스를 적절히 제공합니다. 개인 키는 소유자만 성공적으로 사용할 수 있고 메시지를 읽는 동안 키를 사용하면 해당 키의 소유자만 메시지를 읽을 수 있게 됩니다. 이러한 기능은 메시지 암호화의 기초가 되는 기밀성을 제공합니다. 또한 공개 키는 널리 배포될 수 있으므로 무제한의 사람들이 한 명의 개인 키 소유자에게 정보를 보낼 수 있습니다.

그러나 키 쌍은 메시지 전체에 사용되지는 않습니다. 키 쌍을 사용한 암호화 및 암호 해독 작업은 키 알고리즘의 불가피한 복잡성으로 인해 비용이 많이 드는 프로세스이기 때문입니다. 키 쌍을 사용할 필요는 있지만 전체 메시지에 사용할 필요는 없으며 이는 정보를 "잠금" 및 "잠금 해제"하는 프로세스의 일부가 되어야 합니다. 개인 키가 제공될 때까지 메시지를 읽을 수 없다면 메시지 암호화의 목적은 달성된 것입니다.

이 항목의 앞부분에 있는 "공개 키 암호화의 작동 방식"에서 설명한 것처럼 공개 키는 공개적으로 알려지는 특성을 보완하기 위해 강력한 알고리즘을 사용합니다. 이 강력한 알고리즘은 예전의 대칭 키보다 크기 때문에 강력한 알고리즘을 사용한 계산은 더 느립니다. 정보를 보기 전에 전체 메시지에서가 아닌 정보를 잠금 해제하는 데만 개인 키가 사용되므로 가능한 적은 양의 정보에 키 쌍을 사용하고 개인 키를 제공하지 않는 한 정보를 사용할 수 없도록 함과 동시에 가능한 많은 양의 정보에 빠른 대칭 키를 사용하는 것이 훨씬 경제적입니다.

대칭 키는 비밀 키를 사용하며 이는 양측이 모두 알고 있어야 합니다. 이 프로세스를 "키 협상"이라고도 합니다. 키 쌍을 가지면 하나의 공개 키를 여러 사람들이 사용할 수 있으므로 키 협상은 존재하지 않습니다. 또한 키 쌍을 대칭 키와 함께 사용하여 키 협상을 처리할 수도 있습니다. 대칭 키를 선택하고 키 쌍의 공개 키를 사용하여 그 키를 암호화하여 개인 키 소유자에게 보낼 수 있습니다. 동일한 대칭 키를 여러 받는 사람에게 전송하면 받는 사람 모두 그 키를 사용할 수 있으며 그 키는 받는 사람 각각의 공개 키를 사용하여 암호화됩니다. 개인 키 소유자만 대칭 키를 암호 해독할 수 있으므로 대칭 키는 인증된 사용자 사이 기밀이 유지된 상태로 공유됩니다. 사용자는 특정 작업 또는 세션 동안 한 번 사용하기 위해 대칭 키를 생성할 수 있습니다. 이를 "세션 키"라고 합니다. 공개 키 암호화는 대칭 키 암호화를 대체한 것이 아니고 향상시킨 것입니다.

메시지 암호화의 목적은 개인 키가 제공될 때까지 메시지를 읽을 수 없도록 하는 것입니다. 개인 키를 대칭 키 협상에 사용하여 대칭 키를 안전하게 전송할 수 있습니다. 대칭 키가 받는 사람에게 안전하게 전송될 수 있으므로 대칭 키를 사용하여 메시지를 암호화한 다음 키 쌍의 공개 키를 사용하여 대칭 키를 암호화할 수 있습니다. 개인 키 소유자만이 대칭 키를 잠금 해제할 수 있고 대칭 키는 메시지를 암호 해독하는 데 사용됩니다. 이 작업은 키 쌍을 사용하여 전체 메시지가 암호화 및 암호 해독된 것처럼 작동합니다. 그러나 대부분의 정보에 좀더 빠른 대칭 키가 사용되므로 그렇게 하지 않았을 경우보다 작업이 훨씬 빠릅니다. 이 프로세스 전체에서 메시지는 개인 키가 제공될 때까지 보호된 상태이므로 메시지 암호화의 기본 서비스인 기밀 유지 기능이 제공됩니다. 암호화 및 암호 해독 프로세스 때문에 암호화 후 메시지가 조금이라도 변경되면 데이터 무결성을 위해 암호 해독 작업이 실패하게 됩니다.

대칭 키의 사용이 예측 불가능하며 그 이점이 즉시 명백히 드러나지는 않지만 대칭 키는 메시지 보안을 저해하지 않고도 메시지 암호화 프로세스를 빠르게 하여 메시지 보안을 강화합니다. 다음 그림은 공개 키 암호화의 지원 요소를 사용하는 암호화 순서를 보여 줍니다.

21058391-2d70-42f9-bf25-8ead79705b27
  1. 메시지가 캡처됩니다.
  2. 받는 사람의 공개 키가 검색됩니다.
  3. 일회성 대칭 세션 키가 생성됩니다.
  4. 세션 키를 사용하여 메시지에서 암호화 작업이 수행됩니다.
  5. 받는 사람의 공개 키를 사용하여 세션 키가 암호화됩니다.
  6. 암호화된 세션 키가 암호화된 메시지에 포함됩니다.
  7. 메시지가 전송됩니다.

다음 그림은 공개 키 암호화의 지원 요소가 추가된 메시지의 암호 해독 순서를 보여 줍니다.

50f0afca-e520-46b5-8e12-6e295dfe86d9
  1. 메시지가 수신됩니다.
  2. 메시지에서 암호화된 메시지 및 암호화된 세션 키가 검색됩니다.
  3. 받는 사람의 개인 키가 검색됩니다.
  4. 받는 사람의 개인 키를 사용하여 세션 키의 암호가 해독됩니다.
  5. 암호가 해독된 세션 키를 사용하여 메시지의 암호가 해독됩니다.
  6. 암호화되지 않은 메시지가 받는 사람에게 반환됩니다.

이 절차는 공개 키 암호화가 메시지 암호화의 핵심 서비스인 기밀성 및 데이터 무결성을 지원하는 방법을 보여 줍니다.

디지털 서명 및 메시지 암호화는 상호 보완적 서비스입니다. 공개 키 암호화가 각 서비스와 개별적으로 통합하는 방식을 고려한 후에 이 서비스가 함께 사용되는 방식을 이해하는 것이 좋습니다.

다음 그림은 공개 키 암호화의 지원 요소가 추가된 서명 및 암호화 순서를 보여 줍니다.

e81cca9b-c780-49d9-a3f9-69cc3c442183
  1. 메시지가 캡처됩니다.
  2. 메시지의 해시 값이 계산됩니다.
  3. 보낸 사람의 개인 키가 검색됩니다.
  4. 받는 사람의 공개 키가 검색됩니다.
  5. 보낸 사람의 개인 키를 사용하여 해시 값이 암호화됩니다.
  6. 암호화된 해시 값이 디지털 서명으로 메시지에 추가됩니다.
  7. 일회성 대칭 세션 키가 생성됩니다.
  8. 세션 키를 사용하여 메시지에서 암호화 작업이 수행됩니다.
  9. 받는 사람의 공개 키를 사용하여 세션 키가 암호화됩니다.
  10. 암호화된 세션 키가 암호화된 메시지에 포함됩니다.
  11. 메시지가 전송됩니다.

다음 그림은 추가된 공개 키 암호화 지원 요소를 사용하여 디지털 서명의 암호를 해독하고 확인하는 순서를 보여 줍니다.

97705e57-0a94-4197-99c3-40bb58a9eaa0
  1. 메시지가 수신됩니다.
  2. 메시지에서 암호화된 메시지 및 암호화된 세션 키가 검색됩니다.
  3. 받는 사람의 개인 키가 검색됩니다.
  4. 받는 사람의 개인 키를 사용하여 세션 키의 암호가 해독됩니다.
  5. 암호가 해독된 세션 키를 사용하여 메시지의 암호가 해독됩니다.
  6. 메시지에서 암호화된 해시 값이 포함된 디지털 서명이 검색됩니다.
  7. 메시지의 해시 값이 계산됩니다.
  8. 보낸 사람의 공개 키가 검색됩니다.
  9. 보낸 사람의 공개 키를 사용하여 암호화된 해시 값의 암호가 해독됩니다.
  10. 암호가 해독된 해시 값이 수신 시 생성된 해시 값과 비교됩니다.
  11. 값이 일치하면 메시지가 유효합니다.
  12. 암호화되지 않은 메시지가 받는 사람에게 반환됩니다.

이 절차는 공개 키 암호화를 통해 디지털 서명 및 메시지 암호화가 가능해지는 과정을 보여 줍니다.

특 정 작업을 할 때 한 쪽의 공개 키 또는 개인 키를 다른 쪽에서 필요로 하는 방식을 알아야 합니다. 예를 들어 보낸 사람은 자신의 개인 키를 가지고 있으면 전자 메일에 디지털 서명을 할 수 있지만, 받는 사람의 공개 키가 있어야만 암호화된 전자 메일을 보낼 수 있습니다. 혼동되는 내용이므로 다음 그림에서 각 역할 및 작업에 필요한 키를 표시하는 차트를 보여 줍니다.

ef4e76b6-4799-45a9-90f8-ec7af508152a

다음으로 이해해야 할 사항은 디지털 인증서입니다. 디지털 인증서는 키 쌍을 배포하여 디지털 서명의 사용 및 암호화를 가능하게 합니다.




출처 : https://technet.microsoft.com/ko-kr/library/aa998077(v=exchg.65).aspx




암호화와 복호화를 같은 키를 사용하면 - 대칭키, 비밀키 (알고리즘 종류  : DES, AES, 3-DES ... )
암호화와 복호화를 다른 키를 사용하면 - 비대칭키, 공개키 (알고리즘 종류 : RSA, DSA, EIGamal ... )

로 나눌 수 있다.

설명을 해보자면

암호화와 복호화 할 때 같은키를 사용하니 대칭키
암호화와 복호화 할 때 같은키를 사용하는데 둘중 하나라도 유출 되면 암호문은 제역할을 할 수 없게된다. 그러므로 비밀리에 키를 공유해야 하므로 비밀키

암호화와 복호화 할 때 다른키를 사용하니 비대칭키
암호화와 복호화 할 때 다른키를 사용하는데 하나는 공개되어도 상관없는키(공개키), 다른 하나는 공개되면 안되는 키(비밀키) 이렇게 2개의 키를 가지게 된다. 주로 공개키는 평문을 암호화 하는데 사용되고 비밀키는 암호화된 평문을 다시 평문으로 돌리는데 사용된다.


☆★ 대칭키 암호 VS 공개키 암호


 대칭키 암호 공개키 암호 
 암호/복호에 동일한 키와 동일한 알고리즘 사용
 수신자와 송신자는 키를 교환해야 함
 공유한 키(비밀키)는 비밀로 유지
 키 분배의 어려움
 디지털 서명 불가능(개인 증명이 힘들다)
 속도가 빠름
 암호/복호에 각각 서로 다른 키 와 동일한 알고리즘 사용
 수신자와 송신자는 연결된 키쌍 중 하나를 알아야 함
 키 쌍중 하나(개인키)를 비밀로 유지
 공개키를 공개
 디지털 서명 가능
 속도가 느림



☆★ 키 분배 문제, 키 관리의 문제

 대칭키 공개키
 공유하는 키가 비밀로 유지되어야 하므로 키가 절대로 유출되어서는 안된다. 그러므로 키를 공유하기 위해서는 직접 만나서 키를 교환하거나 VPN 등의 안전한 채널을 사용하여 키를 공유해야 하는 문제점이 있다.  
 키를 공유함에 있어 문제는 없다. 그 이유는 두개의 키 중에서 하나는 공개해도 상관없는 키이기 때문이다. 하지만 비밀키는 절대로 유출이 되면 안되기 때문에 이 비밀키를 유지하기 위한 비용이 든다는 문제점이 있다.



☆★ 하이브리드 암호 시스템
- 대칭 암호는 처리속도가 빠르지만 키 배송문제가 있고 비대칭 암호는 처리속도는 느리지만 키 배송문제는 없다. 그러므로 이 둘의 장점을 합하면 키 배송문제도 해결되고 처리속도도 빨라진다. 이 하이브리드 암호 시스템은 주로 공인인증서에서 사용되고 있다.



☆★ 해시(HASH)함수 특징
- 해시 함수는 오직 무결성만 체크한다.
- 암호화는 가능하나 복호화가 불가능하다.
- 1비트의 손상이라도 있을 경우 무결성이 깨어진다.
- 해시값의 길이는 메시지의 길이와는 상관없이 일정하다.
- 해시함수를 무결성 확인에 사용하기 위해서는 충돌이 발견되어서는 안된다.


출처 : http://sostarzia.tistory.com/24


728x90

'programming > 컴퓨터 일반' 카테고리의 다른 글

디스크관리(기본디스크, 동적디스크)  (0) 2016.04.06
디스크관리  (0) 2016.04.06