어느정도 OS를 마무리하고 지난 번 면접에서 질문이 나왔던 암호학에 대해서 한번 알아보도록하겠다.
사실 컴공 전공하시는 분들은 암호학 과목이 있거나, 보안관련학과분들은 전문적으로 해당 내용을 배우는 것 같다.
일단 평문(Text)을 암호문(Ciphertext)으로 바꾸는 것을 암호화(Encryption), 암호문(Ciphertext)을 평문(Text)으로 바꾸는 것을 복호화(Decyption) 라고 한다.
이점을 헷갈려서는 안된다.
사실 면접에서 이런것을 질문해주실 줄은 몰랐기 때문에 이참에 한번 깊게 파보겠다.아래는 오늘 공부를 해볼 내용을 어떤것들이 있는지 직접 만들어본것이다.
Flow Chart를 코드 처럼 짜는 툴이 있어서 한번 활용을 해보았다.(나중에 리뷰도 할 예정)
# 단방향 암호화(무결성)
단방향 암호화란 한쪽 방향으로 암호화를 한다는 의미이다. 쉽게말해서 암호화만 가능하고 복호화는 할 수 없다. 우리가 네이버에서 비밀번호를 읽어버렸을때 어떻게 하는지 기억하면 된다. 기존의 비밀번호 찾기는 안되고 새롭게 만드는 것은 가능하다.
(회사에서 유저 로그인 비밀번호 만들때도 아마 SHA알고리즘을 통해서 해쉬값을 만들어내서 밀어넣었던거 같다.)
단방향 암호화는 Hash 알고리즘을 사용한다. Hash는 고기를 잘게 다지는것을 말한다. 고기를 잘게 다지면 형체가 없어지지 않나? Hash 알고리즘도 결국 평문(Text)를 형체도 알아볼수 없게 만들어버리는 것이다.
hash 테이블, hash 데이터 등등 뭐 여러 곳에서 쓰이지만 공부할건 Hash암호화 기법이다.
- MDC(Modification Detection Code)
- 데이터 무결성을 판단
- Key없음, 출처확인 불가
- SHA(Secure Hash Algorithms) -1,2 MD5, HAVAL
- MAC(Message Authentication Code)
- 메세지 인증[디지털 서명]
- Key 있음
- HMAC, NMAC, CBC-MAC
여담으로는 SHA는 NASA에서 제작하고 표준으로 채택한 암호학적 해시 함수이다.사실 알고리즘이랑 이런 것들이 더 복잡하고 알 수 없지만, 해시 암호화 기술을 알수 있었다라는 취지로 끝내겠다. 대부분 복호화 할 필요가 없는 정보에서 많이 사용된다. 그이외에 레인보우 테이블 공격, 그를 방지하기위한 Salt e등등 hash함수의 보완책들이 있다. 생각보다 2차 세계대전 이후에 생긴 학문이라 그런지 먼가 싱싱한거 같은 느낌이 많이든다.
# 양방향 암호화(기밀성)
면접질문에 나온건 양방향 암호화 기술의 대칭키, 비대칭키에 대한 질문이였다. 사실 공부하는 지금도 헷갈리긴하지만 글을 작성하면서 다시 바로 잡아 보겠다.
위에서 설명한것 처럼 단방향 HASH 함수를 통한 암호화는 복호화가 불가능하다.(사실 저방식대로 가면 가능한데 원래 이론상은 불가능한게 맞다.)
양방향은 그 반대이다. 암호화 복호화가 둘다 가능하다. 그렇다면 암호문을 해독하기위한 KEY가 있어야하는데 양방향 암호화에서 대칭키, 비대칭키로 나누었다.
- 대칭키(비밀키)
- 암호화, 복호화 하는 키가 동일하다 ➡️ One Key(비밀키)
- 어떤 키로 암호화했다면, 수발신자 모드 같은 키가 있어야 복호화가 가능하다.
- 열쇠방가서 카드 복사하는거라고 생각하면됨
- 비대칭키(공개)
- 암호화할때 사용하는 키, 복호화 할때 사용하는 키가 다르다
➡️ 주택가의 우편함을 생각하면된다. 우리는 우편함의 키를 갖고 있고 편지를 넣을 수 있지만 우편함의 열쇠가 없으면 안의 편지를 읽어볼 수가 없다. - 2개의 키를 사용하게 된다. 비밀키(개인키)와 비밀키를 토대로 만든 공개키가 있다.
- public key: 사람들에게 공개된 키, 정보를 암호화할 수 있음
- private key: 사용자만 알고 있는 암호를 풀 수 있는 키(비밀키)
- 암호화할때 사용하는 키, 복호화 할때 사용하는 키가 다르다
비대칭키, 즉 공개키 암호화 방식은 오래된 과거는 아니다. 아래는 공개키의 장점들에 대해서 한번 살펴보겠다. ( 암호학에서는 Alice와 Bob이 항상 자주 나온다.)
- 기밀성
- Alice가 키 두개를 생성한다 (공개키와 비공개키(비밀키))
- Bob은 Alice가 공개키로 Alice에게 전달할 편지를 암호화 한다.
- Alice는 Bob의 편지를 받아 자신의 비공개키로 편지를 해동한다.
위는 공개키의 기밀성에 대해서 설명한 내용이다. 위 내용은 Alice와 Bob을 제외한 타인은 문서의 내용을 알 수 없다.
- 위조 방지
- Alice가 공개키, 비공개키를 생성한다.
- Alice는 문서의 해시 정보를 자신의 개인키로 암호화한다.
(Alice는 암호화된 문서를 일단에 공개하면, 이 문서를 Alice가 만들었음을 알린다.) - 타인(Bob)은 공개된 공개키로 해당 문서를 해독하여 내용을 볼 수있다.
위는 위조방지, 부인방지의 내용이다. Alice의 공개키로 해독이 가능하고 이 암호화된 문서는 Alice만이 발행할 수 있다는 증거가 되기 때문이다. 이 절차는 우리가 사용하는 공인인증서의 절차와 같다.
대칭키, 비대칭키에서 공개키와 개인키(비공개키)를 알아보았다. 비대칭키 암호기법은 공개키 암호기법이라고도 불리기 때문에 헷갈릴 수도 있다. 대칭키는 비밀키 암호화 기법이라고도 불린다.
대칭키(비밀키) 암호화 기법에는 AES, DES가 있다.
- DES(Data Encryption Standard)의 약자이다. 개발은 70년대에서 미국의 NIST에서 개발을 했다. 취약점이 생겨서 다음 세대인 AES를 개발했다.
- AES(Advanced Encryption Standard)의 약자이다. 기술 발전으로 56비트 키를 쓰는 DES가 안전하게 되지 않아서 NIST에서 AES라는 이름으로 공모를 했고 128비트로 개발이 되었다.
둘은 블록 방식의 암호화 기법이다. 블록방식의 암호화 기법은 어느 특정 비트 수의 집합을 한번에 처리하는 암호 알고리즘을 이야기 하며, 이를 Block이라고 한다. Round방식을 사용해서 진행하는데 이 방식을 반복할수록 암호화 강도를 높이게 된다.
https://www.youtube.com/watch?v=mlzxpkdXP58
(사실 깊게 들어갈수록 좋긴한데 일단 여기까지만 들어가보겠다. Stream방식도 있다.)
비대칭키(공개키, 개인키) 암호화 기법에는 RSA, 디피-헬만 키 교환이 있다.
- RSA는 만들 사람들의 앞 글자만 따서 이름을 지었다. 전세계의 대부분의 인터넷 뱅킹은 RSA 기법을 사용했다. 현재 제일 안전한 기법 중 하나이다.(양자컴퓨터가 나온다면 깨질 수 있다.)
- 디피-헬만 키 교환은 비밀키 교환 방법이다.(설명이 많지만... 여기까지)
https://en.wikipedia.org/wiki/Public-key_cryptography
사실 인터뷰와 SSL관련해서 공부하려고 했는데 생각보다 이론적인 내용이 너무 빡세서 대충 훑고 넘어갔다. 양방향, 단방향, 대칭키, 공개키 알고리즘도 사실 나누어서 공부했어야하는데 일단 여기까지만 공부하고 나중에 뭐 더 필요하면 공부하는 방향으로 해야겠다.
추가로 국내 KISA로 SEED 알고리즘이 있다. 이는 국내 표준이다. 대부분의 공공기관에서 SEED 알고리즘으로 개발을 한다. 이는 1990년 128비트 블록 알고리즘이다. ➡️ 대칭키 기법이다
용어정리가 제일 난해했지만 그 부분은 정확히 알고 넘어간다. 대충 훑어서 틀린부분도 있을 수 있으니 꼭 이상한점 있으면 남겨주세요