보안/네트워크 보안

0919 시스템/ 네트워크 해킹(System/Network Security) 3일차

Bordercolli 2022. 9. 19. 17:35
728x90

시스템 네트워크 보안

<오늘의 주요 내용>

암호화

암호화 프로토콜

암호화 서비스

 

암호화 개요

암호화를 수십번 쓴다. 현재는 암호화 안된 것을 사용하지 않는다. 최근 이슈는 과연 우리가 사용하는 암호회는 안전한가?

 

<우리가 기대하는 것>

이 사이트에서만 암호를 보았으면 좋겠다. 하지만 다른 사람이 내가 아이디를 치는 것을 보지 않을ᄁᆞ? 저번시간에 wireshark로 볼 수 있었다.

암호화를 하지 않으면, 도청된다. 이메일로 로그인을 하는 경우에도 base64로 난독화가 되었지만, 디코딩을 하면 패스워드가 뭐였는지 볼 수 있었다.

 

 

(군단장과 시저만 알고 있어야 한다.)

그림 설명: 로마의 caesar는 갈리아(프랑스) 지방을 정벌을 했는데, 정벌하기 위해서 10년이 걸렸다. 여기 라인강 주변에서 게르만족이 살았는데, 이 곳이 살기 좋다. 여기는 산이 거의 없고 평지였다. 그래서 곡식을 심으면 다 수확할 수 있었다. 게르만족이 인구가 많아지니 내려오게 된다. 로마와 갈리아가 연합해서 게르만족을 막아보자 라고 생각. 빨간 색은 분단들인데, 이들을 배치해놓고, 군단장들에게 연락을 한다. 전령을 보내면 전령이 무사히 도착할ᄁᆞ? 시저 입장에서 자신의 ᄄᆞᆼ이 아니기 때문에 뺏기게 된다. 갈리아 군인이 전령이 가진 메시지를 뺏어서 읽어본다. 그래서 전령이 뺏기더라도 내용을 알 수 없게 암호화를 하기 시작하였다.

(인터넷을 스니핑하더라도 절대 알아보지 못하도록 한다. 그래서 우리가 인터넷을 이용하는 상황하고 시저가 군단장에게 암호화를 보내는 상황과 비슷하다.)

 

shift+2: 알파벳을 정확히 두 칸씩 이동하는 것

 

암호문 상태에서는 아무도 읽을 수 없음. (암호문을 평문으로 바꾸는 방법만 시저와 군단장이 알고 있다. (군단장, 시저도 암호문을 읽을 수 없음))

암호화키와 복호화키는 서로 대칭을 이루기 떄문에 이들을 대칭키라고도 한다.

 

치환이란? 대칭키 방식이 치환만 있는 것은 아니다. 순열이라는 방식이 있다. 다른 말로는 위치를 바꾼다고 해서 전치라고 한다. 순열이란 글자 순서를 바꾸는 것인데, 한글은 쉽지만 다른 언어는 순서를 바꾸면 알아보기 어려움. 매트릭스란 매트릭스의 가로로 쓴 다음에 세로로 읽어들인다. 이 암호문을 알려면 5x5매트릭스를 알아야 한다.

 

매트릭스 방식

암호화: 가로로 쓰고 세로로 읽어 들인다.

복호화: 세로로 쓰고 가로로 읽어들인다.

 

대칭키 방식: 치환(S)와 순열(P) 현재 SPN방식을 사용한다.(S: 치환, P는 순열, N: 네트워크 네트워크는 복잡하게 만든다는 것이고, 치환과 순열을 반복한다. , 치환과 순열을 네트워크처럼 복잡하게 만든다. )

대칭키 방식 특징은 암호화키와 복호화키가 서로 대칭을 이룬다. 대칭키(SYMMETRIC KEY)

암호화키를 알면 복호화키를 알 수 있다. 사실상 같은 키다. (단일키다)

다른 사람이 알면 안된다. 그래서 비밀리에 보관해야 하기 떄문에 비밀키라고 한다.

한 번의 session에서만 사용한다. 그래서 이를 세션키라고 한다. 세션이라는 것은 한 번의 클라이언트와 서버가 한 번 연결하고 로그아웃아고 브라우저를 끌때까지를 새션이라고 한다.

 

대칭키, 세션키, 단일키의 공통점은? S로 시작한다.

 

ROT(ROTATE), 치환 방식

알파벳이 26개인데 이를 반으로 나눈다. 그러면 13이 되는데, 그래서 ROT13방식을 사용하면 AN이 된다. CP가 되고, FS가 되고 이러한 방식으로 매치가 된다. ROT13hello를 쓰면 uryyb가 만들어 진다.

 

https://rot13.com/

ROT13(카이사르 암호)방식의 단점은?

영어만 암호화된다.

숫자, 특수문자는 암호화 안됨.

 

이러한 문제점으로 나온 것이 ROT47이라는 방식이 등장하게 됨.

 

ROT47

대소문자/ 특수문자/ 숫자를 94개를 반으로 나누어서 섞어서 사용하는 방식

스키테일은 컴퓨터에서 발전한 방식은 아니고 시저사이퍼는 로마 시대에 암호화를 사용했다.(치환방식, 율리어스 캐사르가 대칭키를 처음 사용) 1800년대에는 르네상스 시대가 되면서 학문이 발전하고 암호화가 시작됨. 1854년이 되면 전신기가 나오는데, 이를 통해서 신호를 멀리 보낼 수 있음 1918년에는 1~2차대천을 겪으면서 모스부호화같은 암호문을 써서 보냄. 이후 영국 처칠이 회고록에서 독일의 암호화를 복호화하고 있었음을 실토. 충격받은 독일은 이니그마를 개발. 이를 영국 앨런튜링이 크리스토퍼(봄버)를 만들어서 이니그마를 봄버로 복호화를 하였다.(영화 이미테이션 게임), 그래서 기계를 돌려서 복호화를 하였음. 그러다가 앨런 튜링이 만든 봄버가 발전해서 컴퓨터가 되었고 1960년대 패스워드가 처음으로 도입되었다. 이때가 인터넷이 만들어지기 직전인데, 네트워크를 통해서 다른 컴퓨터에 접속하니 접속은 되는데 올바른 사용자인가 의심하게 된다. 그래서 패스워드를 도입함. 그래서 인터넷이 나오고 많은 사용자들이 컴퓨터를 사용하다 보니 안전한 암호화가 필요하게 되었다. 그래서 데스? 베스?은행과 금융권에서 사용하기 시작 . 케빈 미트닉이라는 사람이 처음으로 해킹을 하고 그러니 처벌을 하려고 하니 처벌법이 없다. 그래서 법을 만들게 됨. 이 법을 만들고 처음 적용한 사람이 케빈 미트닉. 그 다음 1997년 메튜배번, 리차드 프라이스라는 사람이 장난을 하다가 미 공군 기지를 해킹하게 되었다. 그런데 이 경유지가 우리나라였다. 그래서 미국측에서 우리나라에서 해킹한줄알고 오해를 했는데, 알고보니 영국이었다. 그래서 리차드 프라이스 아버지가 컴퓨터를 박살냄.

그러고 2001년 데스가 크래킹이되었다. 그것 때문에 새롭게 AES가 생성됨. 지금ᄁᆞ지 이를 사용됨. 최근에는 양자 암호화가 등장하게 됨.

 

http://news.grayhash.com/html/category/hacker/Hacking_Duo.html

매튜베번, 리차드 프라이스

 

이니그마는 매일매일 암호화가 달라져서 복호화를 알 수 없다. 이를 앨런 튜링이 크리스토퍼를 만들어서 키 값이 달라지더라도 복호화를 할 수 있는 방법을 고안했다.

 

송신자도 대칭키가 있어야 하고 수신자도 송신자가 암호화한 대칭키를 가지고 있어야 한다.

그러면 중간에 있는 사람이 이 암호문을 받더라도 내용을 모른다. 이 대칭키를 가지지 않으면 복호화를 할 수 없다. 그래서 대칭키를 가진 사람만 복호화를 할 수 있다. 그런데 대칭키의 단점은 대칭키를 비밀리에 상대방에게 줄 방법이 없다. 대칭키를 어떻게 줄ᄁᆞ? 대칭키를 보낼때는 암호화가 안된다는 것을 감안하고 보내야 한다. 직접 갖다줘야하는데, 시저는 이 문제를 어떻게 해결하였을ᄁᆞ? 키 전달의 문제

(시저는 군단장에게 대칭키를 어떻게 주었을ᄁᆞ? 군단장이 임명장을 받을떄, 대칭키를 같이 주었다. 그래서 갈리아 군인들이 쳐들어와서 군단장이 죽었다. 그러면 부군단장이 군단장이 될 수 있을ᄁᆞ? 대칭키를 가지고 있지 않기 때문에 할 수 없다. 그래서 다른 사람에게 임명장과 대칭키를 주고 전쟁터를 보내는 것이다.)

 

<대칭키 종류>

des(최초의 표준키), aes(현재 가장 많이 사용하는 키), seed/hight/lea/aria(우리나라 대칭키), blowfish(미국에서 제작)

 

대칭키의 장점: 만약 우리가 로그인한다고 하면 아이디 패스워드를 aes로 암호화 한다.

대칭키(AES) 활용 사례: ID/PW로 로그인하는 대부분의 경우는 AES로 암호화, WIFI를 암호화할떄, 암호를 풀 때(WIFI를 이용하는 모든 트래픽도 AES로 암호화 등등)

 

대칭키 문제: 직접 전달하지 않으면 안전하지 않고, 키 개수의 문제가 있다. (키가 생각보다 많이 필요해진다.)

 

<대칭키의 키 개수의 문제>

키가 많이 필요로 하다.

EX) A라는 회사가 있다고 하면, A라는 회사랑 B라는 회사가 암호화를 하려고 한다. 그러면 키가 1개만 있으면 된다. 그런데 한 업체가 또 끼어들어서 C라는회사가 등장을 해서 나도 암호화를 하고 싶다라고 하였다. 그러면 3개가 필요로 하다. 둘이서 할때는 1개의 키가 필요로 하고 3명이서 할떄는 6개의 키가 필요로 하다. 여기서 D라는 회사가 거래를 하고 싶다고 한다. E라는 회사하고도 거래를 하고 싶다. 그러면 10개의 키가 필요로 하다.

공식: n(n-1)/2개의 키가 필요로 하다.

 

ex) 항공사들이 마일리지 교환 프로그램을 하려고 한다. 이는 개인정보이기 때문에 암호화를 해야 한다. 그런데 항공사가 20개가 넘는다. 20*19/2가 되면 키가 190개가 필요로 하다. 키를 관리하기도 어렵고, 이렇게 하는 것은 좋은 방법이 아니다. 그래서 키 개수가 너무 많아지는 상황이 발생한다.

des동작 방법: tcp가 데이터를 자르기 전에 암호화는 5계층에서 이루어지는데,(자르는 것은 4계층) 데이터를 tcp가 나누기 전에 des가 먼저 자른다. 데이터를 64비트씩 잘라서 암호화를 한다. key로 암호화를 하느데, 이 키의 길이가 64bit이다. 데이터를 잘라서 하는 것을 블록 암호화라고 한다. 64비트ᄍᆞ리 블록을 만든다. 블록 단위로 암호화를 한다. 키의 길이도 64비트. 키는 64bit인데, 실제 암호화키는 56bit, 나머지 8bit는 패리티 비트로 채운다. 이게 크래킹이 되면 안되는데, 이게 크래킹이 되어서 백도어가 있다고 의심을 하게 됨(신뢰성 문제)

실습1) DES암호화, 복호화

 

1999RSA(암호화/ 복호화)컨퍼런스: DES를 크래킹하는 시연 57시간 만에 크래킹에 성공. 그래서 평문을 써서 금고를 넣고 잠그고 암호문을 주고 풀어보아라. 이를 성공시켜서 표준으로 계속 사용할 수 없게 됨. 이를 표준에서 제외하고 그래서 나온 것이 3DES를 임시 표준으로 사용하게 되었다.새로운 대칭키 표준을 공모를 하기 시작함. 그래서 선정한 것이 2001년 차세대 대칭키 표준(AES, advanced encryption standard)을 선정. 우리나라 퓨처 시스템이 있는데, 벨기에에 rijinjael(리인델)AES로 최종 선정됨. (이유: 안정성도 있고, 속도가 빨라서) 현재까지도 잘 사용하고 있다. 키가 좀 ᄍᆞᆲ음.

SPN(치환과 순열을 반복하는 방식. 키가 3가지가 있다. 128/192/256 하지만 현재는 256만 사용함.)

지금까지는 표준 대칭키는 AES

각 업체마다 다른 대칭키를 사용한다. 대칭키 방식은 AES인데, AES에서 키를 생성하면 키가 다 달라진다.

 

표준은 DES였는데, 2001년은 AES로 바뀌어서 표준이 됨.

우리나라에서도 대칭키를 만들어서 사용하고 있고, 4계층에서는 tcp가 원하는 블록 만큼 자른다.그 전단계를 말하는게 seed

 

seed는 금융중앙망에서 사용을 하고 있다. 그냥 aes쓰면 안 돼? 다른 나라에서 만든 것은 믿을 수 없어서. 남이 만든 것은 믿고 쓸 수 없다. 소스코드를 공개하는 이유는 백도어가 없음을 보여주는 것. 이게 털리면 원화가 제로가 됨. 우리나라뿐만 아니라 다른 나라도 마찬가지. (대칭키는 각자 국가에서 만든 것을 주로 사용한다.)

 

그래서 대칭키는 만드는 방식이 어렵지 않다. 치환하고 순열을 여러번 하기만 하면 된다. (SPN방식, DES처럼 라운드를 여러번해서 바꿔치기 같은 방식을 사용하기 때문에.)

 

RC시리즈 (MIT공대의 rivest교수팀이 개발)

RC4: 무선 공유기에서 많이 사용되었는데 키가 크래킹되는 방식이 알려져서 최근에는 사용하지 않는다. 그래서 칼리리눅스에 설치되어 있다. 칼리리눅스에 rc440분 정도면 aircracknf, fernwificracker등을 사용하면 크래킹이 가능하다. rc4를 개량해서 rc6, rc6aes를 선정할 때 최종라운드ᄁᆞ지 갔다가 탈락./ 그 다음 브루스 슈나이어, 이 사람의 fish 시리즈에서 two fishaes선정시 최종라운드ᄁᆞ지 갔다가 탈락. blowfish는 안전하기로 유명함(해커들이 악성코드를 만들 때 많이 사용함.)

 

대칭키의 문제점을 해결하기 위해서 만든게 있는데...

Diffie-hellman라는 사람은 이산대수의 어려움을 이용해서 공개키 방식을 인류최초로 만듦. 원리 누구나 개인키와 공개키 한 쌍을 가진다.(개인키로 공개키를 생성) ex) 공인인증서, 서버에도 있다.

실습2) 개인키 공개키 보기

 

 

 

*디피에 헬만 방식의 특징

개인키는 혼자 사용해야 해서 600, 공개키는 상대방에게 제공하기 위한 것 644

디피헬만(diffihelman)은 키 전달의 문제를 해결했다. 공개키를 상대방에게 준다. 평문으로 가도 상관 없음(이메일로 보내도 되고 다른 사람이 가져가도 상관없음.) 반면 개인키는 절대 공개하면 안됨. 나 혼자만 사용. 공개키를 서로 나누어 가지면 자신의 개인키와 상대방의 공개키를 연산해서 (이산대수 연산) 생성된 키는 양쪽이 일치하게 된다. 이것을 만듦. 이 키가 바로 대칭키로 사용하면 됨. 대칭키를 교환할 필요가 없다.

 

그림 설명: 앨리스와 밥은 좋아하는 사이다. 앨리스와 밥이 초기값을 나누어 가진다. (임의의 값) 여기서 앨리스가 개인키가 있다. 앨리스의 초기값과 개인키를 연산해서 공개키를 만든다. 앨리스의 개인키는 앨리스만 가지고 있다. bob도 초기값이 있고, 개인키를 연산해서 공개키를 만들었다. bob의 공개키는 앨리스에게 보낸다. (공개된 네트워크로) 양쪽이 키를 받았다. bob의 공개키와 앨리스 개인키를 연산해서 나온 세션키가 있고, 앨리스 공개키와 밥 개인키를 연산해서 나온 세션키가 있는데, 여기서 나온 세션키들이 같다는 것이다. 여기서 암호화를 하면 복호화가 가능해진다는 원리를 가지고 있다.

(개인키는 자기가 가지는 것이고, 공개키는 상대방에게 준다. 상대방의 공개키와 자신의 개인키를 이용해서 연산해 세션키를 만들었다. 이렇게 나온 세션키들은 서로 같다고 나온다.)

 

자신의 개인키와 상대방의 공개키를 연산해서 생성된 키는 양쪽이 일치하게 됨. 그래서 나온 세션키는 같기 때문에 교환할 필요가 없어진다. (대칭키로 사용하면 됨(대칭키를 교환할 필요 없음.))

 

대칭키 키교환의 문제를 해결함(공개키만 제공했는데, 대칭키가 생성되었다. 그래서 대칭키의 키 교환문제를 해결하게 됨.)

idpw를 모두 암호화해서 상대방에게 제공하면 됨. 상대방도 같은 대칭키가 있기 때문에 복호화가 가능해진다

RSA특징:

- 소인수분해에 불과하다.대칭키를 생성하는 것이 아니라 공개키로 암호화를 하면 개인키로 복호화가 가능하고, 개인키로 암호롸를 하면 공개키로 복호화가 가능하다. (양방향 암호화 가능)

- 91 = a*b =7*13(1제외), 이처럼 곱하기는 쉬운데 소인수 분해는 어렵다는 방식을 이용함. 개인키로 암호화하면 공개키로 복호화, 공개키로 암호화하면 개인키로 복호화

특허가 2001년 만료되어서 무료로 사용 가능 상당히 많이 사용됨 (De Facto)

 

실습3) 네이버 > 자물통> 첫 번쨰 눌러서> 인증서 유효 > 대상 공개키 알고리즘> 맨 밑에 RSA볼 수 있다.

그림 설명: 앨리스는 밥에게 비밀메시지를 보내려는데, bob만 이 메시지를 보았으면 좋겠다. 그럴려면 bob에게 공개키를 달라고 한다. 그래서 밥이 공개키를 주면, 앨리스는 이를 받고 평문 메시지를 밥의 공개키로 암호화를 한다. 이 경우 앨리스의 공개키, 개인키를 사용하지 않는다. 이 경우 밥의 공개키로 암호화를 하게 된다. 인터넷을 통해서 암호문을 보냈다. 이때 중간에 다른 사람들도 암호화된 편지를 볼 수 있는데, 밥의 개인키를 가지고 있지 않아서 내용은 볼 수 없다. 밥의 공개키로 암호화 한 것은 밥의 개인키로 복호화를 할 수 있다. (다른 사람은 밥의 개인키를 가지고 있지 않기 떄문에)

(개인키는 자기가 가지는 것이고, 공개키는 상대방에게 준다. 상대방의 공개키와 자신의 개인키를 이용해서 연산해 세션키를 만들었다. 이렇게 나온 세션키들은 서로 같다고 나온다.)

 

자신의 개인키와 상대방의 공개키를 연산해서 생성된 키는 양쪽이 일치하게 됨. 그래서 나온 세션키는 같기 때문에 교환할 필요가 없어진다. (대칭키로 사용하면 됨(대칭키를 교환할 필요 없음.))

 

대칭키 키교환의 문제를 해결함(공개키만 제공했는데, 대칭키가 생성되었다. 그래서 대칭키의 키 교환문제를 해결하게 됨.)

idpw를 모두 암호화해서 상대방에게 제공하면 됨. 상대방도 같은 대칭키가 있기 때문에 복호화가 가능해진다

 

RSA특징:

- 소인수분해에 불과하다.대칭키를 생성하는 것이 아니라 공개키로 암호화를 하면 개인키로 복호화가 가능하고, 개인키로 암호롸를 하면 공개키로 복호화가 가능하다. (양방향 암호화 가능)

- 91 = a*b =7*13(1제외), 이처럼 곱하기는 쉬운데 소인수 분해는 어렵다는 방식을 이용함. 개인키로 암호화하면 공개키로 복호화, 공개키로 암호화하면 개인키로 복호화

특허가 2001년 만료되어서 무료로 사용 가능 상당히 많이 사용됨 (De Facto)

 

실습4) 네이버 > 자물통> 첫 번쨰 눌러서> 인증서 유효 > 대상 공개키 알고리즘> 맨 밑에 RSA볼 수 있다.

 

그림 설명: 앨리스는 밥에게 비밀메시지를 보내려는데, bob만 이 메시지를 보았으면 좋겠다. 그럴려면 bob에게 공개키를 달라고 한다. 그래서 밥이 공개키를 주면, 앨리스는 이를 받고 평문 메시지를 밥의 공개키로 암호화를 한다. 이 경우 앨리스의 공개키, 개인키를 사용하지 않는다. 이 경우 밥의 공개키로 암호화를 하게 된다. 인터넷을 통해서 암호문을 보냈다. 이때 중간에 다른 사람들도 암호화된 편지를 볼 수 있는데, 밥의 개인키를 가지고 있지 않아서 내용은 볼 수 없다. 밥의 공개키로 암호화 한 것은 밥의 개인키로 복호화를 할 수 있다. (다른 사람은 밥의 개인키를 가지고 있지 않기 떄문에)

 

자신의 개인키와 상대방의 공개키를 연산해서 생성된 키는 양쪽이 일치하게 됨. 그래서 나온 세션키는 같기 때문에 교환할 필요가 없어진다. (대칭키로 사용하면 됨(대칭키를 교환할 필요 없음.))

 

대칭키 키교환의 문제를 해결함(공개키만 제공했는데, 대칭키가 생성되었다. 그래서 대칭키의 키 교환문제를 해결하게 됨.)

idpw를 모두 암호화해서 상대방에게 제공하면 됨. 상대방도 같은 대칭키가 있기 때문에 복호화가 가능해진다

 

RSA특징:

- 소인수분해에 불과하다.대칭키를 생성하는 것이 아니라 공개키로 암호화를 하면 개인키로 복호화가 가능하고, 개인키로 암호롸를 하면 공개키로 복호화가 가능하다. (양방향 암호화 가능)

- 91 = a*b =7*13(1제외), 이처럼 곱하기는 쉬운데 소인수 분해는 어렵다는 방식을 이용함. 개인키로 암호화하면 공개키로 복호화, 공개키로 암호화하면 개인키로 복호화

특허가 2001년 만료되어서 무료로 사용 가능 상당히 많이 사용됨 (De Facto)

 

실습3) 네이버 > 자물통> 첫 번쨰 눌러서> 인증서 유효 > 대상 공개키 알고리즘> 맨 밑에 RSA볼 수 있다.

 

 

그림 설명: 앨리스는 밥에게 비밀메시지를 보내려는데, bob만 이 메시지를 보았으면 좋겠다. 그럴려면 bob에게 공개키를 달라고 한다. 그래서 밥이 공개키를 주면, 앨리스는 이를 받고 평문 메시지를 밥의 공개키로 암호화를 한다. 이 경우 앨리스의 공개키, 개인키를 사용하지 않는다. 이 경우 밥의 공개키로 암호화를 하게 된다. 인터넷을 통해서 암호문을 보냈다. 이때 중간에 다른 사람들도 암호화된 편지를 볼 수 있는데, 밥의 개인키를 가지고 있지 않아서 내용은 볼 수 없다. 밥의 공개키로 암호화 한 것은 밥의 개인키로 복호화를 할 수 있다. (다른 사람은 밥의 개인키를 가지고 있지 않기 떄문에)

 

인증: 올바른 사용자가 보내는 메시지이다.

그림 설명: 밥이 앨리스의 마음을 알았다. 그래서 밥은 청혼을 하려고 한다. 청혼은 비밀리에 하는 것이 아니다. 문제는 이 메시지를 보내면 앨리스와 앨리스 가족들이 있는데, 이 가족들이 밥이 보낸 것이 확실해야 앨리스의 결혼을 허락한다. 그런 상황인데, (조건: 비밀메시지가 아니디. 밥이 보낸 것이 확실해야 한다.) 청혼 메시지를 작성하고 자신의 개인키로 암호화를 한다. 암호문이 나오는데, 인터넷을 통해서 보냈다. 보내면 다른 사람들도 다 볼 수 있다. 이를 복호화를 하려고 하면 밥의 공개키를 가지고 있으면 볼 수 있다. 공개키니 다른 사람들도 볼 수 있다. 앨리스의 가족들은 밥의 공개키를 가지고 복호화를 했다. 복호화가 된다는 것은 밥의 개인키를 사용했다는 것. 개인키를 사용했다는 것은 이 메시지는 밥이 암호화를 했다는 것이다. 중간에 해커들이 밥의 공개키를 가지고 복호화를 한다. 이 경우는 인증이 중요해서 밥이 보낸 것이 확실하다는 것을 확인한다.

여기서 암호화는 밥의 공갴키는 누구나 검증이 가능하다.

 

실습4) 네이버 공개키

1340분 수업 필기

처음부터 네이버 공개키로 암호화를 보내면 안되냐? 왜 세션키를 사용? id pw만 보낼때는 가능하지만, 이메일, 카페, 블로그를 사용자에게 안전하게 보낼 방법이 없다. 일반적으로는 사용자에게 공개키를 주지 않는다. 웹 메일 뭐가 왔나 카페에 뭐라고 썼나 이런것들을 알려고 id, pw를 알아낸다.

이 세션키를 가지고 데이터를 암호화하면 양방향으로 암호화가 된다.

네이버 개인키가 노출되면 모든 사용자 계정이 털리게 된다. 사용자 계정이 털리는 것과는 다르다. 왜냐하면 패스워드를 넣는다고 db에 패스워드가 그대로 저장되는가? 해시값으로 바뀌어서 저장이 된다. 해시를 이용하는데, 우리가 실습한건 md5,sha1인데, 실제로는 sha256/ 384를 사용하는데, 이는 복호화가 어려움.

 

ssl/ tls (네이버 url위에 자물쇠 모양)

- 웹 서버와 웹 브라우저간 암호화를 하기 위한 프로토콜

netscape라는 회사에서 netscape navigator라는 웹 브라우저를 만들었다. ms에서 익스프로러를 만들어서 시장 점유율이 90%가 됐다가 현재 1%가 됨. 이 회사에서 ssl(secure socket layer)를 듦. 웹 암호화 시작

ssl이 취약점이 발견되기 시작함. (1.0,2.0은 취약점발견) ssl3.0을 만들었지만 취약점이 있다. 그래서 netscape에게 맡길 수 없어서 표준화하기로 결정하고 이름은 신(transpot layer security)로 변경, 변경 ssl3.0의 업그레이드 버전으로 tsl1.0을 만듦.(1999)

현재는 ssl은 사용하지 않고, 관용적으로 ssll이라고 한다. 실제로는 tls만 사용하고 있다. 그래서 표기를 ssl/ tls를 쓰기도 한다. (tls에 익숙하지 않기 때문에)

TLS1.3버전을 사용하고 있음.

- id/ pw는 해시값으로 db에 저장이 된다.

 

공개키를 받았다. 그럼 세션키를 생성해서 세션키를 네이버의 공개키로 암호화를 한다. 암호화된 세션키를 네이버에게 보낸다. 그럼 네이버 개인키를 이용해서 복호화하면 세션키가 생성되고 그럼 양쪽에서 세션키가 생성된다. 이때 id/ pw를 입력하면 아까 복호화했던

인터넷 속성 > 고급 > 체크하고 확인

 

해시함수

어떤 문서를 입력해서 해시함수에 넣고 출력하면 해시값이 나오게 된다. 해시값은 의미가 없다. (있으면 곤란하다.) (해시값==해시코드)

세가지 특징이 있다.

고정길이 출력이다.: 같은 길이가 출력된다. 100단어를 사용하나 한 단어를 사용하나 길이가 같은 해시값이 나오게 된다.(항상 일정한 길이로 출력됨.)

일방향 함수: 역연산이 불가능하다. 해시값으로 원문을 알아내는 것은 불가능하다.

하지만 해시함수를 가지고 원문을 그래픽 카드를 이용해서 해시값을 계산해서 원문을 찾아낸다. 이를 채굴하는 것을 블록체인 기술이라고 한다.

충돌이라는 것은 원문은 같은데 해시값이 다른 것을 말한다.

 

 

 

 

실습5) 해시값 계산

https://shattered.io/

구글 보안팀의 세계적인 해커들이 모여서 각종 테스트, 크래킹을 해본다고 함.

구글 보안팀(프로젝트 제로)

<sha-1의 충돌쌍>

fasthash_kr.exe인증: 올바른 사용자가 보내는 메시지이다.

정리: md5sha1은 더 이상 안전한지 않다. ismp-p, iso27001에서 사용하면 안된다고 한다.(인증을 해주지 않음.)

 

무결성: 변조되었는지 안되었는지 확인 ex) 문서가 있으면 문서나 파일이 고쳐지지 않았다. 이를 증명하는 것.

 

< 이 내용 매우매우 중요 >

1비트라도 달라지면 해시값이 달라진다.

유급휴가를 가지고 해시값을 계산했다. rsadh든 데이터를 암호화할땐 시간이 오래 걸린다. 해시코드에다가 개인키로 암호화를 하는데 이를 서명이라고 한다 (내용을 노출시키지 않으려고 하는 것이 아니라 내가 했다는 것을 보여주기 위함.) 서명된 해시값 형태로 보낸다. 검증은 서명된 해시값을 송신자의 공개키로 복호화를 하고 원문의 해시값과 비교해서 일치하는 지를 확인한다. 일치하면 무결성이 검증되는 것. 회사 erp에 공지사항으로 띄운다. 직원들이 이를 봤더니, 이 내용이 맞는지 틀린지 알아야 한다. 이를 가지고 일단 해시값을 계산해본다. 서명된 해시값을 사장 공개키로 복호화를 해본다. 사장이 보낸 해시값과 직원들의 해시값을 비교해보고 일치하면 문제가 없고 불일치하면 변조됨. 일치하면 원문에 해시값이 있는데, 사장이 보낸것과 받는 것이 같다. 사장님의 공개키로 복호화한다는 것은 사장님의 개인키로 암호화를 했다는 것. 부인봉쇄(뒤에서 딴말하는 것 방지)

전자서명에서는 기밀성이 제공되지 않는다. 내용이 노출되는 것을 지원되지 않는다.

전자서명 (검증): 무결성, 인증, 부인봉쇄

(원문을 가지고 해시값을 구한다. 송신자가 자신의 개인키를 가지고 암호화하는데, 이를 서명이라고 한다. 서명한 다음에 서명된 해시값을 원문에다가 붙인다. 그런 다음에 공지사항에 올린다. 그러면 수신자들이 원문을 받아서 읽어본다. 밑에보니 서명된 해시값이 있는데, 이를 서명된 송신자 공개키로 복호화를 해서 해시값을 구한다(송신자가 자신의 개인키를 사용했다는 의미). 그리고 원문의 해시값을 비교해보고 일치하면 무결성이 검증된다는 것이고, 틀리면 변조된 것이다.)

전자서명에 대해서 ...

생성: 원문의 해시값에 송신자의 개인키로 서명을 하고 원문과 함께 보냄

검증: 서명된 해시값을 송신자의 공개키로 복호화하고 원문의 해시값과 비교해서 일치하는지 확인한다.

일치하면 무결성 검증, 인증, 부인봉쇄 확인됨.

무결성(내용이 변조되지 않았음), 인증(송신자에 대한 검증), 부인봉쇄(나중에 뒷말 못하게 하는 것 ) 이 세가지가 지원된다.

여기서는 기밀성은 지원되지 않음.

 

그러면 일상생활에서 전자서명은 어디서 사용되는가?

ex) 우리에게 확인을 하는 경우 : 은행이체 마지막 단계(~계좌로 얼마를 이체하시겠습니ᄁᆞ?), 이때 공인인증서가 뜬다. 그러면 여기다가 비밀번호를 넣는데, 이를 넣는다는 것은 개인키를 사용한다는 것이다. 그래서 서명이 되는 것이다. 서명이 되기 떄문에 나중에 우리들이 뒷말을 못하게 된다. (공인인증서를 사용한다는 것은 개인키를 사용한다는 것, 암호화는 이미 tls를 하고 있기 떄문에 은행이체 마지막 단계에서 이 작업을 할때는 기밀성이 필요로 하지 않는다. 이미 암호화한채로 왔다갔다하며 세션키를 공유한 상태니까 본임인지만 확인하면 된다.)

ex) 스마트폰 이체: xx은행 yyy계좌로 얼마를 이체하겠습니까? 이거를 지문인식을 하면 본인임이 확인되는 것 나중에 뒷말 못함.

 

공인인증서를 사용한다는 것은 개인키를 사용한다는 것, 암호화는 이미 tls를 하고 있기 떄문에 은행이체 마지막 단계에서 이 작업을 할때는 기밀성이 필요로 하지 않는다. 이미 암호화한채로 왔다갔다하며 세션키를 공유한 상태니까 본임인지만 확인하면 된다.

 

* 인증서

bob이 공개키를 줫는데, 가짜면? 그래서 bob의 공개키가 아니라 해커의 공개키다. 해커의 공개키를 받아왔네? 그래서 복호화를 했더니 (해커의 개인키로 서명한 것), 평문이 나왔다. 이때 해커는 bob인척 하고 나랑 결혼하려면 돈 얼마가 필요로 하다. 해서 앨리스는 돈을 입금하면서 돈이 털리게 된다. 이처럼 공개키에 대한 검증(신뢰성)이 필요로 하다. 진ᄍᆞ 거래 상대의 공개키인가 확실치 않다.

공개키에 대한 전자 서명이 인증서라는 것이다.  

무결성: 변조되었는지 안되었는지 확인 ex) 문서가 있으면 문서나 파일이 고쳐지지 않았다. 이를 증명하는 것.

 

공개키에 대한 검증이 필요함.

진ᄍᆞ 거래 상대의 공개키인가? 해결 방법: 인증기관이 발급함 > 인증기관을 어떻게 믿어? > 루트 인증기관 > 루트 인증기관이 맞는지는 어떻게 확인 > os에 들어있음(인터넷 옵션)

 

해당 네이버 공개키인지 진ᄍᆞ인지 어떻게 아는가? 발급자를 보면 tls~적혀 있는데, 얘네가 확인을 했으니 믿고 써라. 그럼 tls는 누군데? 인증경로를 보니 tsl rsa~적혀있는데, digicert

이런것에 대한 정보가 인터넷에 들어있다. 인터넷 옵션 > 내용 > 인증서 > 신뢰할수 있는 루트 인증기관 > digitcert를 찾는다 > 해시값만 확인해본다.

 

네이버 공개키에 대한 해시값을 구한다. 인증기관이 자신의 개인키로 해시값에 서명을 해준다. 그럼 아ᄁᆞ 공개키를 넣고 서명된 해시값을 넣는다.(전자서명과 유사하다. 전자서명 원문들어가고 해시값에 서명을 한 것) 인증기관이 주로 하는 일은 인증서를 발급하는 것. 여기다가 서명해주고 1년에 70만원을 받는다. (전자인증 대행 비용 70만원)

 

 

http는 평문으로 전송: tcp80를 사용한다.

https는 암호문으로 전송: tcp443을 사용 tls가 동작하면서 인증서를 받아옴(인증서 안에는 방문한 웹 사이트의 공개키가 들어있다. 공개키를 가지고 세션키를 생성한 다음에 서버에 공개키로 암호화해서 보내준다. 그러면 서버에서 받아서 서버는 사니의 개인키로 복호화하면 세션키 나옴: 양쪽이 세션키를 갖게 된다. 이러한 과정을 거치게 된다.)

 

인증서(certificate)

형식:x.509v3

인증서의 주요 내용: 서명 알고리즘, 유효기간, 발급자, 주체, 주체의 공개키, 서명된 해시값 등이 들어있다.(인증서 안에)

공개키가 올바른지를 확인하는 것(주체의 것이 맞는지를 검증)

인증서는 공개키에 들어있으니 공개키라고 생각하면 된다. 인증서는 검증된 공개키이다. 인증서는 ca개인키로 서명을 하고 서명해주는데 72만원을 받고, 이게 진ᄍᆞ인지를 검증할 필요가 있다. ca공개키를 다운받고 이용해서 검증을 한다. 그럼 여기서 해시값이 나올거고 네이버 공개키에서 나온 해시값과 비교한다.

ca공개키를 믿을 수 있는가? 그래서 rootca의 개인키로 해시코드를 서명해놓는다. rootca의 공개키는 검증할 수 있으니, 해당 해시코드를 검증한다.

 

pki기관(공개키 기반 구조)

1) NPKI(National public key infrastructure)

제일 상위에 정책기관(PAA)이 있고, 우리나라는 미래부/ Root CA: KISA/ CA(인증기관)으로는 금융결제원, 정보 인증, 전자인증, koscom, 무역정보 혐회/ RA(등록기관): 은행, 증권회사, 대행업체 등등

2) GPKI, MPKI, EPKI 등등

 

RA(등록기관): 인증서를 신청을 받고, 신청 업체를 검증하고 등록을 대행함. 인증기관이 다 외국에 있기 때문에 국내에 이를 대행하는 기관들이 있다. 대행하는 기관들이 등록기관이라고 하는데, 이를 대행하고 있고, 신청업체에 이를 검증한다.

CA: 인증서를 발행하는 책임을 가지고 있다.

 

 

☆☆☆☆☆ 왕왕중요 ☆☆☆☆☆

인증서 취소 목록: 인증서를 발급하고 나면 취소하기가 어렵다. 인증서를 잘못발행할 수 있다. 개인키로 한번서명하면 취소할 수 없다. 그래서 블랙리스트에다 잘못된 것을 넣는다. 하지만 블랙리스트를 잘 보지 않으니 OCSP를 만든다. 이는 웹 브라우저가 바로 확인할 수 없어서 편리하다. 온라인에서 실시간으로 인증서의 유효성을 검증하는 프로토콜

 

정리)

생성 인증서는 공개키가 올바른지 확인하기 위한 것이다. 방법은 전자서명과 굉장히 비슷하다. 그래서 원문이 공개키이고, 원문의 해시값을 구해서 송신자(CA)의 개인키로 서명을 한다

 

검증 송신자(CA)의 공개키로 서명된 해시값을 복호화한 후 원문(공개키)의 해시값을 구해서 비교해봄.

 

실습5) rootca.or.kr