728x90

대부분의 소프트웨어는 완벽하지 않다. 소프트웨어에 존재하는 결함은 버그 (bug)라고 부른다. 보안 문제를 일으키는 버그를 취약점 (vulnerability)이라고 부른다. 공격자가 취약점을 이용하여 수행하는 보안 공격을 익스플로잇 (exploit)이라고 한다. 즉, 취약점은 익스플로잇을 할 수 있는 버그이다.

 

 

제로데이 공격 (0-day attack)

 

소프트웨어의 취약점이 발견되고 패치되기 까지는 어느정도 시간이 필요하다. 아직 패치가 나오지 않은 취약점을 제로데이 취약점 (0-day vulnerability)이라고 부른다. 패치가 나오지 않은 시점에 이루어지는 보안 공격을 제로데이 공격 (0-day attack) 이라고 한다.

 

버퍼오버플로우 (buffer overflow)

 

int main() {
	int buffer[10];
    buffer[12] = 55;
}

 

다음의 코드를 실행하면 어떤 일이 벌어질까?

  • 임시메모리공간에buffer[10](10개의공간)을할당
  • buffer[12] 위치의 메모리에 55이 할당된다.

 

입력 받는 데이터의 크기가 버퍼의 크기를 벗어나는지 제대로 체크하지 않을 경우 공격자는 버퍼를 벗어난 메모리 의 공간의 데이터를 수정할 수 있다.(혹은 자신이 원하는 값 을 쓸 수 있다.)

 

  • C언어에서 사용자 입력을 받는 gets() 함수는 버퍼의 크기를 체크할 수 없어 버퍼 오버플로에 취약하다.
  • Morris worm이 gets() 함수의 취약점을 이용했다.
char buf[100]; // 100바이트짜리 버퍼

gets(buf); // 입력 데이터가 100바이트를 넘기는지 확인하지 않는다.

buffer overflow의 대응책

[첫 번째]

스택 카나리아(stack canary)

  • 카나리아라는 명칭은 탄광의 유독 가스 를 알아차리기 위해 카나리아라는 새를 이용한 데에서 유래
  • Stack canary라는 임의의 난수 값을 스택 메모리의 리턴 주소 전에 저장해 둔다.
  • 공격자가 스택 메모리 공간을 덮어써서 리턴 주소를 조작할 경우, 중간에 위치한 stack canary가 손상된다는 점을 이용해 함수 리턴 전에 stack canary를 확인하는 방법
  • 컴파일러에서 제공하는 보안 기능이다.

[두 번째]

데이터 실행 방지(DEP, data execution prevention)

 

OS에서 제공하는 보안 기능으로, 실행 금지(NX)라고도 부름.

  • 메모리 할당 시에 읽기/쓰기/실행 속성을 지정할 수 있는데, 데이터 영역 메모리는 실행 금지(NX)로 함
  • 해커가 임의의 코드를 데이터 영역에 실어서 실행하는 것을 차단
  • 두가지방식이있다.
    • CPU 차원에서의 하드웨어 지원
    • 소프트웨어 에뮬레이션: 스레드 태스크 스위칭 시 코드 주소를 확인 하여 실행 속성이 없는 메모리일 경우 실행을 중단

[세 번째]

 

데이터 실행 방지(DEP, data execution prevention) - Windows 10의 Windows 보안 설정

 

 

반환 지향형 프로그래밍 (ROP : Return-Oriented Programming)
  • DEP를 우회하기 위해 고안된 코드 취약점
  • 메모리 상에 존재하는 라이브러리 함수 코드 일부를 가져와서 리턴 주소 체인을 만들어 실행시키는 방식

정상적으로 존재하는 코드 메모리의 일부를 이용했으므로 DEP에 의해 차단되지 않는다.

 

ROP 의 대응책

ASLR(Address Space Layout Randomization)

  • 해커가ROP에쓰이는코드조각의메모리주소를알수없도 록 메모리 공간의 배치를 랜덤화한다.
  • OS에서 제공하는 보안 기능이다.
  • Windows 10의 Windows 보안 설정 ( 밑에 그림 참고)

 

FSB (Format String Bug)

 

서식 문자열 버그(FSB, Format String Bug)

  • C언어에서 콘솔 출력을 수행하는 printf 함수는 서식 문자열과 출력할 데이터를 인자로 전달받는다.
  • 문자열데이터str을출력할때printf(“%s”,str)대신 printf(str) 형태로 출력할 경우 서식 문자열 버그에 취약하다.
  • Printf 함수에 의해서 해석되는 “str”은 출력하고자 하는 문자열이 아 니라 printf 함수에서 사용할 각종 형식 지시자(%d, %s 등)를 포함한 format string으로 인식한다.
  • 따라서출력하려는문자열내에지시자(directive)가들어있으면, printf 함수에 전달된 인자의 개수와는 상관없이 이러한 형식 지시자 의 개수 만큼의 인자들이 스택으로부터 추출된다.
  • 공격자는 입력되는 str 문자열에 % 기호를 포함시켜 서식 문자열을 구성 할 수 있다. 서식 문자열 중 %n은 공격자는 이것을 이용하여 메모리 값을 조작할 수 있다.
  • %n 형식은 format string 내에서 %n 지시자 전에 지정된 출력되어야 하는 모든 공간의 개수를 해당 변수로 저장한다.
    • ) int val;
      printf(“
      aaaa%n”, &val); // val에 문자의 개수인 4가 대입된다.
  • printf 함수가 %n 지시자를 만나면 이 지시자의 순서에 해당하는 내용을 스택에서 pop하고 pop된 내용을 주소로 하여 해당 주소에 지금까지 출력 된 문자의 개수를 저장하게 된다. 이때 만약 이 주소가 어떤 함수의 리턴 주소가 저장되어 있는 곳이라면 프로그램의 흐름이 변경될 수 있다.

 

FSB (Format String Bug) 의 대응책

  • 시스템 차원에서는 대응할 수 없고 컴파일러 차원에서 대응하고 있다.
  • FSB를 예방하기 위해 많은 C/C++ 컴파일러에서 printf(str)와 같은 문장을 경고로 처리한다.
  • 또, 많은 C/C++ 컴파일러에서 표준이 아닌 서식 문자 인 %n의 지원을 없애 FSB를 이용한 메모리 조작의 가능 성을 없앴다.
  • 그러나 FSB를 이용하여 민감한 정보를 읽어보는 것은 여 전히 가능하기에 printf(str)와 같은 문장은 피해야 한다.

 

'서버 > 암호' 카테고리의 다른 글

루트킷 (rootkit)  (0) 2021.07.29
이진 분류기(binary classifier)의 결과 분류  (0) 2021.07.29
멀웨어(malware)  (0) 2021.07.27
TLS 내부  (0) 2021.03.25
TLS record 생성  (0) 2021.03.24
728x90
  • 컴퓨터 시스템에 악영향을 끼칠 수 있는 소프트웨어
  • 악성 소프트웨어(malicious software) 를 의미한다.
  • 멀웨어를 진단하고 제거하는 프로그램은 안티바이러스 (antivirus)라고 부른다.

 

 

멀웨어 분류

[복제 여부에 따른 분류]

- 복제하는 멀웨어

     - 바이러스 (virus) : 복제를 위해서 숙주 프로그램을 필요로 한다.

     - 웜 (worm) : 숙주 프로그램 없이 자가 복제로만 전파한다.

     - 웜 바이러스 (worm virus) : 웜의 자가 복제 특성과 바이러스의 감염 특성도 가진 멀웨어

- 복제하지 않는 멀웨어

     - 트로이 목마 (trojan horse)

 

[공격 행위에 따른 분류]

     - 스파이웨어 (spyware) : 컴퓨터에서중요한정보를외부로유출시키는멀웨어

     - 애드웨어 (adware) : 컴퓨터사용자에게광고를보여주는멀웨어

     - 봇넷 (botnet) : DDoS 공격에 동원되는 좀비 PC에 설치하는 멀웨어

     - 키로거 (keylogger) : 사용자의키보드입력을외부로유출시키는멀웨어

     - 랜섬웨어 (ransomware): 사용자의데이터를암호화하고복구를대가로금전을요구하는 멀웨어

     - 백도어 (Backdoor) : 통상 접근제어의 인증, 인가 과정을 거치지 않고 공격자가 원격으로 공격대상에 접근할수 있는 통로를 제공

 

멀웨어 분석

멀웨어 분석 방법은 크게 두 가지로 나뉜다.

  • 정적 분석 (static analysis)
    • 멀웨어를 실행하지 않고 분석하는 방법이다.
    • 보안 전문가각 멀웨어를 실행하지 않고 우선 파일에서 정보를 최대한 얻어낸다.
  • 동적 분석 (dynamic analysis)
    • 멀웨어를 실행해서 분석하는 방법이다.
    • 보안 전문가가 멀웨어를 실행해서 그 행위를 조사한다.

 

멀웨어 탐지

안티바이러스의 멀웨어 진단 방식은 두 가지로 나뉜다.

    • 시그니처 기반 탐지 (signature-based detection)
      • 보안 전문가가 찾아낸 멀웨어의 특징(시그니처)을 파일에서 찾아보는 방법이다.
      • 예) 
        • 파일의 해시값: MD5, SHA1 등
        • 바이너리 코드 패턴
        • 문자열 데이터
      • 앞의 방법들은 변종이나 신종은 잘 탐지하지 못한다는  단점이 있다. 이를 극복하기 위해 여러 기법들이 개발되어 왔다.
      • 제네릭 탐지 (Generic Detection)
        • 멀웨어 변종들의 공통된 명령어 opcode 패턴을 찾아 알려지지 않은 변종을 진단하는 기법이다.
      • 휴리스틱 탐지 (Heuristic Detection) 
        • 멀웨어들이 자주 사용하는 명령어와 윈도우 API 호출 패턴을 찾아 의심 파일로 진단하는 기법이다.
  •  
    •  

 

  • 행위 기반 탐지 (behavior-based detection)
    • 무결성 (Integrity) 검사
      • 정상 상태 시스템의 모든 파일의 해시 값을 보관해 이를 바탕으로 변화된 실행 파일들을 의심 대상으로 삼는 기법이다.
    • 행위 차단 (Behavior blocking) 
      • 시스템에서 발생하는 모든 행위를 모니터링하면서, 멀웨어와 유사한 행위가 발생하면 해당 행위를 한 프로세스를 종료시키고 파일을 삭제한다.
    • 실행 중인 멀웨어의 행위를 감시해서 멀웨어가 한다고 알려진 행위를 찾아내는 방법이다.
    • 신종 멀웨어와 변종 멀웨어도 잡아낼 수 있다.
    • 멀웨어의 행위를 기반으로 검출 할 때 멀웨어가 실행되면서 내부 시스템에 영향을 주는 문제가 있다.
    • 멀웨어를 실행시킬 때, 다음과 같은 방법으로 내부 시스템에는 영향을 주지 않으면서 행위 기반 탐지를 하기도 한다.
    • 에뮬레이터 (emulator)
      • 소프트웨어적인 방식으로 가상의 컴퓨터 환경을 구현하는 프로그램
    • 샌드박스 (sandbox)
      • 실제 시스템에서 실행하지만, API 호출을 가로채어 보호된 영역에서 실행시켜서 실제 시스템에는 영향을 주지 않도록 하는 방법
      • 샌드박스
    • 클라우드 서버
  • 각각 정적 분석, 동적 분석과 유사하다.

멀웨어 치료

  • 웜, 트로이 목마: 해당 멀웨어 파일을 제거한다.
  • 바이러스: 감염 방식을 역으로 돌려(역공학) 정상 파일을 복구

'서버 > 암호' 카테고리의 다른 글

이진 분류기(binary classifier)의 결과 분류  (0) 2021.07.29
익스플로잇 (exploit)  (0) 2021.07.27
TLS 내부  (0) 2021.03.25
TLS record 생성  (0) 2021.03.24
TLS Layer  (0) 2021.03.23
728x90

실제 내용은 contents에 있다. 이 안에는 handshake 프로토콜에서 전달하는 메시지가 될 수도 있겠고( handshake 프로토콜 과정이라는 가정에) 모든게 다 끝났을 경우에는 application data를 쪼개서 [TLS record 생성]에서 봤듯이 그 쪼갠 것들을 안에 넣어서 전달할 수 있다. 그 외에도 alert, changecipherspec도 있다. contens와 MAC 부분이 세션 키로 암호화 되어서 전달된다. 

 

그리고 TLS의 경우에는 record를 보낼 때마다 카운터를 동작한다. 그래서 record를 보낼 때 마다 0부터 시작해서 하나씩 증가시킨다. 실제적으로 TLS는 일련번호(sequence number)가 있다. 그런데 헤더에는 sequence number field가 없다. 그렇지만 내부적으로 동작 할 때는 갖는다. MAC을 계산 할 때는 data, MAC key를 가지고 계산을 하는데 이 때 sequence number를 같이 넣어서 MAC을 넣는다. 그래서 내부적으로는 어떤 record에 해당되는 sequence number가 있는 것이다. 받는 쪽에서도 sequence number를 넣어서 MAC을 계산한다. 만약에 서버와 클라이언트의 sequence number가 일치하지 않으면 중간에 빠졌거나 변경된 걸로 간주할 수 있다. 그러면 올바른 값의 MAC이 안나온다. (이 부분은 몰론 TCP가 segment 단위에서 하지만 TCP segment check만 가지고는 불충분하기 때문에 TLS 에서 record sequence number를 내부적으로 운영하고 있고 이것으로 MAC을 계산한다)

 

'서버 > 암호' 카테고리의 다른 글

익스플로잇 (exploit)  (0) 2021.07.27
멀웨어(malware)  (0) 2021.07.27
TLS record 생성  (0) 2021.03.24
TLS Layer  (0) 2021.03.23
키(🔑 "key") 계산  (0) 2021.03.22
728x90

TLS record로 만들기 위해서 framentation을 통해 쪼갠다. (Application data가 긴 경우) 그리고 압축 할 수 있으면 압축한다. 그 다음으로 Handshake 프로토콜에서 정해진 세션 키와 MAC키 가 있을 거니깐. 

이렇게 내려 온것을 HMAC을 이용해서 MAC키를 붙인다. 

그리고 이것을 암호화 시킨다. 이때는 세션키를 가지고 MAC키 까지 포함해서 암호화 시킨다. 

그리고 TLS record를 만들기 위해서 header를 붙인다. 그러므로 이것이 TLS에서 최종 output이 된다. 고로 이것이 record 이다.

이 TLS record로 만들어 졌고 이게 TCP에 내려가서는 TCP segment로 전달이 이루어지게 된다. 

 

 

 

'서버 > 암호' 카테고리의 다른 글

멀웨어(malware)  (0) 2021.07.27
TLS 내부  (0) 2021.03.25
TLS Layer  (0) 2021.03.23
키(🔑 "key") 계산  (0) 2021.03.22
키 교환 방법  (0) 2021.03.21
728x90

 

TLS record protocol을 살펴보면은 TLS는 handshake 프로토콜만 있는게 아니라 record 프로토콜도 같이 있는데, handshake 프로토콜에서 세션 키, MAC 키 를 결정해서 응용 메시지를 전달 할 때 MAC키를 이용해서 메시지 인증 (HMAC)을 만들고 다음으로, 세션 키로 암호화 시켜서 응용 프로토콜에 메시지를 보내게 된다. 그 과정에서 바로 TCP segment로 보내지 않고 TLS Layer에서 그것을 record로 만들어서 그것을 TCP로 보낸다. TCP segment로 만들어서 실제 망에서 전달이 일어나게 되는데 그렇게 record로 만드는 과정을 하나 더 집어넣은 이유는 TCP자체가 byte stream개념이기 때문이다. 그러니까 record를 만드는 layer를 하나 더 집어넣었다. 어플리캐이션에서 부터 내려오는 데이터를 record로 만들면서 record1,2,3,4,5 이런식으로 record 단위로 보게된다. 그래서 record 단위로 MAC을 붙이고, 또는 암호화를 하게된다. 

처음에 인증을 하고 키를 설정하는 과정에서 TLS handshake프로토콜을 거치면서 세션 키와 MAC 키가 결정되게 되면 응용 프로토콜 메시지는 TLS record가 만들어져서 전달이 이루어지게 된다. 

'서버 > 암호' 카테고리의 다른 글

TLS 내부  (0) 2021.03.25
TLS record 생성  (0) 2021.03.24
키(🔑 "key") 계산  (0) 2021.03.22
키 교환 방법  (0) 2021.03.21
암호 방식 리스트 or 암호 알고리즘 리스트(Cipher Suite)  (0) 2021.03.21
728x90

클라이언트와 서버는 둘만이 아는 PMS값을 갖는다고 했다. 키를 계산하는 과정은 다음과 같다.

  • Master secret( MS ) , pre-master secret (PS), Client random (CR), Server random (SR)

MS = MD5( PS || SHA-1(‘A’ || PS || CR || SR)) ||  

 

(PS, CR, SR) 순으로 MS 값을 계산한다. 복잡해 보이지만 쭉 연결 시켜서 SHA-1으로 해쉬 시키는 방식으로 한 것이다. 

결국에는, MS에서 키를 만들어 내는데 키는 하나가 아니라 여러개의 키를 만들어 낸다. 세션키, MAC키, 초기값을 만든다.

 

Client nonce, server nonce, master secret으로 부터 다음의 키를 계산한다.

  • Server MAC key  => (HMAC 해쉬하기 위함, 암호화를 하기 위한것 x)
  • Client MAC key  => (HMAC 해쉬하기 위함, 암호화를 하기 위한것 x)
  • Client encryption key  => 세션키(암호화 키)
  • Server encryption key => 세션키(암호화 키)
  • Server initialization vector (IV)  => 대칭키 암호화 알고리즘에 사용하는 초기값
  • Client initialization vector (IV)  => 대칭키 암호화 알고리즘에 사용하는 초기값

 

위에 키들이 비슷한 것들이 두 개인 이유가 서로 클라이언트와 서버 양 방향에서 사용하기 때문이다.

 

 

정리하자면 PS에서 MS를 계산하는데 이 때 계산하기 위해서 같이 사용 하는 것이 CR, SR이다. 즉 MS를 PS, CR, SR로 계산한다. 그리고 MS로 부터 6개의 키 값들을 계산한다.

MS = MD5( PS || SHA-1(‘A’ || PS || CR || SR)) ||  

 

‘A’ 와 같은 캐릭터 스트링에 다가 PS, CR, SR을 쭉 연결해서 해쉬 해서 MS를 만들고 MS를 가지고

MD5( MS || SHA-1(‘A’ || MS || SR || CR)) ||

 

MS를 SR, CR을 쭉 연결 시켜서 고정된 캐릭터 스트링에 다가 해쉬해서 나오는 결과값을 일정 한 길이로 잘라서 각각을 키로 사용 한다. (밑에 그림 참조)

 

'서버 > 암호' 카테고리의 다른 글

TLS record 생성  (0) 2021.03.24
TLS Layer  (0) 2021.03.23
키 교환 방법  (0) 2021.03.21
암호 방식 리스트 or 암호 알고리즘 리스트(Cipher Suite)  (0) 2021.03.21
TLS Handshake 프로토콜 (4 단계)  (0) 2021.03.21
728x90

다음 네 가지 방법을 이용하여 키 교환/설정을 한다.

 

RSA - 공개키를 이용해서 세션키를 설정하는 경우에는 클라이언트는 세션키를 만들었다면 이 세션키를 서버에 공개키로 암호화 해서 전송을 하면은 서버는 안전하게 클라이언트가 만든 세션키를 받을 수  있다. 그래서 server_key_exchange에는 전송할 정보가 없다. 

 

Fixed Diffie-Hellman - 인증서 안에 서버가 자신의 Diffie-Hellman 파라메터를 클라이언트에게 알려주면 클라이언트 입장에서는 서버의 Diffie-Hellman 파라메터를 받았으니까 server_key-exchange에는 따로 전송할 정보가 없다. 이 DH경우에는 중간자 공격의 위험은 없 왜냐하면 서버가 보내는 DH파라메터는 인증기관이 서명하니깐 누가 중간에서 그걸 가지고 장난칠 수는 없기 때문이다. Ephemeral DH와의 차이가 뭐냐면 DH파라메터가 인증서를 보낼 때 고정되니깐 그 인증서에 나와있는 DH파라메터를 계속 사용을 하게 되는데 ephemeral DH는 필요할 때마다 서버가 자기 비밀 값을 보내주니깐 DH값을 일시적으로 사용할 수 있다. ephemeral을 사용하는 이유가 인증 프로토콜에서 순방향 안정성(FS: Forward Security)을 이용해가지고 ephemeral DH를 사용한다. 

 

ephemeral Diffie-Hellman - 가장 안전한 키 설정 방법이다. (forward security도 보장을 해줌) 이 경우에는 인증서에는 서버의 공개키를 전송한다. 이것만 보면 RSA 의 경우와 같지만 자신의 Diffie-Hellman 파라메터를 server_key_exchange에 포함해서 클라이언트에게 전달하게된다. 그 때 그 파라메터는 자신의 개인키로 서명을 해서 “이거는 내가 보내는것이 맞다”라는 것을 확인한다. 서버가 개인키로 서명을 했기 때문에 Diffie-Hellman의 경우에는 MITM(Man In The Middleattack)-중간자공격에 위험성이 있는데 ephemeral Diffie-Hellman은 개인키로 서명해서 보내기 때문에 MITM은 가능하지 않다. 

 

 

Anonymous Diffie-Hellman - 이건 일반적인 DH(Diffie-Hellman)이다. 가장 안전하지 않는 방법이고 이 경우에는 MITM에 취약하다.

'서버 > 암호' 카테고리의 다른 글

TLS Layer  (0) 2021.03.23
키(🔑 "key") 계산  (0) 2021.03.22
암호 방식 리스트 or 암호 알고리즘 리스트(Cipher Suite)  (0) 2021.03.21
TLS Handshake 프로토콜 (4 단계)  (0) 2021.03.21
TLS Handshake 프로토콜 (3 단계)  (0) 2021.03.21
728x90

이러한 암호 방식 리스트를 주고 받으면서 클라이언트와 서버 간에 어떤 암호 알고리즘, 해시 알고리즘, 키 교환방식을 쓰는지를 서로간에 합의를 해서 결정하게 된다. 

 

암호 알고리즘, 해시 알고리즘, 전자 서명 방식, 키 교환 방식을 결정하게 된다.

클라이언트가 자신이 사용할 수 있는 리스트를 서버한테 주면은 서버가 그 중 하나를 선택하게 되는데

 

RSA, DH_DSS, … 이런것들이 키 설정 방식을 의미한다. 

 

키 설정 방식을 간단하게 설명 하면 두 가지 방식이 있는데 1. 공개 키 방식 2. Diffie-Hellman 방식이 있다.

  • RSA는 공개 키를 사용해서 세션키, 대칭키를 설정하는 방식이다.
  • 나머지 DH_DSS, DH_RSA, DHE_DSS, DHE_RSA, DH_anon은 Diffie-Hellman 방식을 사용하는건데, 이 경우는 세 가지로 구분 되어 있다. 1. DH_DSS, DH_RSA는 fixed Diffie-Hellman 방식 2. DHE_DSS, DHE_RSA는 ephemeral Diffie-Hellman 방식 3. DH_anon는 anonymous Diffie-Hellman 방식 이 있다. 결국 키 설정은 Diffie-Hellman의 세 가지랑 공개 키 방식을 놓고 보면은 네 가지 있다고 볼 수 있다.

AES는 암호 알고리즘을 의미한다. 어떤 알고리즘을 사용 할 것인가를 말한다. 그리고 CBC는 블록체인을 말한다. 결국 AES000_CBS까지가 어떤 알고리즘을 사용 할 것인지를 말해준다.

SHA_256은 해쉬 알고리즘을 얘기한다. 

 

그러나 전자 서명 방식은 다른 필드에 표현되어있다.

'서버 > 암호' 카테고리의 다른 글

키(🔑 "key") 계산  (0) 2021.03.22
키 교환 방법  (0) 2021.03.21
TLS Handshake 프로토콜 (4 단계)  (0) 2021.03.21
TLS Handshake 프로토콜 (3 단계)  (0) 2021.03.21
TLS Handshake 프로토콜 (2 단계)  (0) 2021.03.21
728x90

 


단계 4

 

change_cipher_spec 메시지는 알고리즘 규격에 변화가 생겼을 때 알려준다.

 

그리고 finish 클라이언트가 서버로 혹은 서버가 클라이언트로 보내서 서로간에 마지막 handshake 과정을 확인하는건데, 지금까지 받았던 모든 메시지를 붙여서 MAC 계산한다. 결국 finished메시지를 통해서 단계 1,2,3,4 까지 받았던 메시지를 확인해서 무결성과 인증에 대한것을 MAC 통해 한다. 만약 메시지가 하나라도 false 되어 있으면 MAC값을 통해 있다. 

728x90

 


 

단계 3

 

비밀값을 만들고 이것을 서버에게 알려줘야 하는데 알려주는 것을 3단계의 client_key_exchange를 통해서 알려주게 된다. 만약에 RSA(공개키)를 이용해서 알려줄 경우에는 PMS를 만들어서 서버의 공개키(RSA)로 암호화 시켜서 보내면 이 값은 서버에 개인키가 없으면 이 값은 복호화 시켜서 볼 수가 없다. 결국 서버만이 볼 수가 있다. 그다음 DH를 쓰는 경우에는 DH파라메타 값을, 그리고 fixed DH의 경우에는 클라이언트의 DH key를 인증서에 넣어서 보내주게 된다. 그리고 클라이언트는 메시지에 MAC을 만들어 붙여서 전송을 하는 것이다.

 

 정리하자면, 서버는 클라이언트가 보낸 PMS값을 받았고 공개키를 사용 경우 공개키로 암호화 해서 보냈으니까 서버는 자신의 개인키로 풀면 값을 찾을 있고 만약 DH 사용 경우 DH 파라메타를 보냈으니까 서버는 PMS값을 찾을 있는 것이다. 그러면 여기서 부터 master secret 값을 계산 하고, 여기서 나온 값을 이용해서 키를 계산한다.

+ Recent posts