Key의 안정성
- 암호(Cryptography) 기술을 사용하려면 대부분 키(key) 가 사용된다.
- 가역적으로 만들기 위해서
- 평문 ↔ 암호문
- 키 값의 크기보다 키 공간(key space)의 크기가 더 보안성과 밀접한 관련이 있다.
- 키는 길이가 아니라 “가능한 키들의 집합”이 더 중요한 요소
- 키 공간의 크기를 키우기 위해서는 키의 bit 수를 키우는 것이 중요하다.
- AES, DES 등의 대칭키 암호화 알고리즘 : 키의 자리수가 곧 키 공간의 크기와 연결된다. 예를 들어 AES-256은 키의 길이가 256비트이므로 키 공간의 크기가 2^(256), trivial한 것 빼고는 다 가능하다.
- RSA나 Diffie-gellman과 같은 공개키 암호화 알고리즘 : 소수의 크기와 수학적 특징이 키 공간의 크기와 연결된다. 흔히 쓰는 RSA의 경우, 키의 길이가 1024비트이거나 2048비트이지만, 키 공간의 크기는 2^(1024), 2^(2048) 보다는 각각 훨씬 작다.
- = RSA가 키의 길이가 더 길다.
- 키가 노출되면, 그 즉시 평문 또한 노출되기 때문에 키와 평문은 동일한 혹은 그 이상의 가치를 지닌다고 볼 수 있다.
- 키가 노출되지 않기 위해서는 검증된 암호 알고리즘을 사용하고 키를 잘 보관해야 한다.
키의 종류
- 공개키/대칭키 알고리즘에 따른 키의 종류
- 대칭키
- 통신을 하는 쌍방이 공유하는 키
- 대칭키 암호화 뿐 아니라 Message Authentication Code에도 사용된다.
- 공개키/비밀키
- 공개키 암호 기술에 사용되는 키 쌍으로, 비밀키만 주인이 갖고, 공개키는 문자 그대로 공개한다.
- RSA 등과 같은 공개키 암호화 뿐 아니라 디지털 서명에도 사용된다.
- 대칭키
- 사용 목적에 따른 분류
- 기밀성 유지 목적으로 사용되는 키
- 인증 목적으로 사용되는 키
- 키 사용 횟수에 따른 분류
- 마스터키 (Master Key)
- 세션키를 생성하기 위해 사용된다.
- 고정된 키로, 주로 관리자만이 갖고 있는 키이다.
- 노출되거나 유효기간이 지나지 않는 이상 계속 사용된다.
- 세션키 (Session Key)
- 세션 : 1번의 연결
- 임시로 쓰는 키
- 대칭키라고도 부른다.
- 통신에서 한 세션에서 이동하는 모든 데이터를 암호화할 때 쓰는 키
- 그 세션에서만 사용되고 세션이 끝나면 폐기된다.
- 주로, 마스터 키로부터 만들어진다.
- 마스터키 (Master Key)
- 암호화 대상에 따른 분류 (무엇을 암호화 하느냐)
- CEK (Contents Encryption Key) 또는 TEK (Traffic Encryption Key) : 데이터를 암호화할 때 사용되는 키
- Traffic : 전송되는 데이터
- KEK (Key Encryption Key) : Enigma에서 나왔던 것(오늘의 키를 암호화할 때 사용), 키를 암호화할 때 사용되는 키, 대칭키인지 공개키인지 따지지 않음
- CEK (Contents Encryption Key) 또는 TEK (Traffic Encryption Key) : 데이터를 암호화할 때 사용되는 키
CEK, KEK 사용의 예시
- KEK는 사전에 공유 중이다.
- If, CEK가 업데이트 되어야 하면
키 관리 기법 - 키 생성
- 난수로부터 만드는 방법
- 사람의 Action이 없는 경우 (Https에서의 홈페이지 접속)
- 난수 : 무작위성, 예측불가능성
- 난수로 만드는 것이 좋은 이유 : 키 성질 중 “다른 사람이 추측하기 어려워야 한다.” 는 것이 있는데, 난수가 바로 그런 추측하기 어렵다는 성질이 있기 때문이다.
- 난수를 생성하기 위해서는 하드웨어를 이용하는 것이 가장 좋다. 대부분 그것이 힘들기 때문에 소프트웨어로 구현된 의사난수를 사용한다.
- 하드웨어는 로직이 들키면 안되어 거의 사용되지는 않지만, 군통신에서는 사용한다. 난수 발생 원리를 회로를 봐야 알 수 있기 때문에 알기 어려워서 좋다.
- 소프트웨어는 로직이 들켜도 로직 변경만 하면 된다. 디컴파일하여 소스코드를 볼 수 있기 때문에 안좋다.
- 비밀번호로부터 만드는 방법
- 사람의 Action이 있는 경우 (집 PW 같은)
- 비밀번호를 그대로 키로 쓰기 보다는, 비밀번호를 해시 함수에 넣은 값을 키로 사용한다. (비밀번호 그 자체는 추측하기가 상대적으로 쉽기 때문이다.)
- 보안성을 강화하기 위해 비밀번호만 해시 함수에 넣는 것이 아니라 (H(pw)만 계산하는 것이 아니라) 추가적인 작은 값을 같이 해시함수에 넣어서(H(pw,s)와 같이 계산) 키를 만들어낼 수 있는데, 여기서 이 추가적인 작은 값 s를 솔트(salt)라고 한다.
- 솔트의 역할은 사전 공격 (Dictionary Attack)을 방지하는 것이다.
- 이것저것 될만한 것 다 넣어보기
- 한 번 더 거쳐서 안전하다.
- 길이가 제각각이기 때문에 고정 길이로 만들기 위해 해시 함수를 사용한다.
- 공격자가 PW를 알아내는 방법 : 사용자와 연관된 PW일테니까 (30% 성공률) → 이를 방지하기 위해 salt를 첨가한다.
- 위 두가지 방법 중 상황에 맞게 쓰면 된다.
키 갱신과 배송
- 키 업데이트를 해야 하는 시점
- 유효기간이 끝났을 때 : 어느 정도 시간이 지나면 키는 노출이 되었다고 본다
- 키가 노출되었을 때 : 유효기간이 안 끝났을지언정
- 일정 횟수 이상 키가 사용되었을 때
- 갱신(update된 키는 안전하게 보관해야 한다.
- = Forward Secrecy
- 그렇지 않으면 앞으로 전달될 메세지들이 노출될 수 있기 때문이다
- 키가 노출되었는데도 원래 키로 계속 보내게 되면 보내는 내용들이 모두 노출된다.
- 정해진 사람들에게만 보내야 한다.
- 키 배송을 위해서는 사전에 공유된 KEK로 암호화하거나 공개키 암호화 방식을 이용하여 키를 암호화 하여 전송한다.
- 새로운 키를 KEK로 암호화 하여 보낼 수 있다.
키의 폐기
- 키를 더이상 사용하지 않을 때 폐기를 한다.
- 메모리에서 삭제하는 행위
- 키가 갱신되었을 때 갱신 전 키는 안전하게 폐기해야 한다.
- = Backward Secrecy
- 그렇지 않으면 오래전부터 암호화된 메세지를 수집하고 있다가 폐기된 키를 이용하여 복호화 할 수 있기 때문이다.
- 따라서 보안 SW를 개발할 때, 키 생성/암복호화 뿐만 아니라 키 폐기 과정도 안전하게 수행될 수 있도록 설계해야 한다
- 키를 잃어버렸을 때
- 대칭키를 잃어버리면 복호화를 못한다
- MAC용 키를 잃어버리면 무결성 검증을 못한다
- 공개키 암호화에 사용되는 비밀키를 잃어버리면 복호화 or 서명을 못한다.
PBE (Password-based Encryption)
- 비밀번호를 이용하여 만든 키로 데이터를 암호화 하는 기법
- 과정
- 비밀번호로 KEK 생성
- 세션 키 생성 이후 KEK로 암호화
- 메세지를 세션키로 암호화하여 통신
- 세션키는 랜덤함수로 만든 CEK 또는 TEK이다.
- 기본적으로 서버에 로그인할 때 ID/PW가 사용되기 때문에 PBE가 많이 사용된다.
- Email로 ID를 대신하여 쓰기도 한다. → 덜 기억해도 돼서 좋다. & ID 중복이 안 일어나서 좋다.
- IBE : Email & PW 로 키를 만드는 방법
Unix에서의 비밀번호 보안
- Salt의 세가지 기능
- 비밀번호가 비밀번호 파일에서 보여지는 것을 방지 한다
- 두 사용자가 같은 비밀번호를 가지더라도 salt가 다르기 때문에 비밀번호 파일에 저장된 두 사용자의 값은 서로 다르다
- Offline dictionary attack을 어렵게 만든다
- 서로 다른 시스템에 가입된 사용자가 같은 비밀번호를 사용했는지 알기 어렵게 만든다
- salt가 달라지면 hash값도 달라지기 때문에 알기 어렵다.
- 비밀번호가 비밀번호 파일에서 보여지는 것을 방지 한다
- 기존 Unix에서의 비밀번호 관리 방법
- 비밀번호는 8자리 ASCII 값, 12비트의 salt를 이용
- DES 를 25번 반복 사용하여 비밀번호를 암호화
- 하지만, 근본적으로 비밀번호가 짧기 때문에 현재 컴퓨터 환경에는 맞지 않음
- 현재 Unix에서의 비밀번호 관리 방법
- 임의 길이의 비밀번호, 48비트의 salt를 사용한다.
- MD5 해시 함수를 사용하며, 이 해시 함수 내부에는 1000회 반복하는 반복문이 포함 되어 있다. → 1000번 돌리면 저속이 된다.
PEB 암호화
PEB 복호화
salt의 역할
- Dictionary attack을 방지하기 위해서이다.
salt로 비밀번호를 관리할 때 공격 방법
- 공격자가 비밀번호 파일을 얻었다고 가정한다.
- 공격자가 가능한 모든 비밀번호와 모든 salt들을 이용하여 대규모의 사전을 만든다.
- 크게 어려운 일 …
- 사전 안의 해시값과 비밀번호 파일의 해시값을 비교하여 비밀번호를 알아낸다.
- 거꾸로 추측하는 일
- 만일 해시값이 같은 경우가 없으면 크래킹 프로그램은 가능한 패스워드로 구성된 사전 안의 모든 단어를 변형하여 다시 시도
- 변형 방법: 단어를 거꾸로 해서 적용, 추가 숫자나 특수문자 적용
- Rainbow Table
- 문자열과 해당 문자열의 해시값의 쌍을 저장해놓은 표
- 영문자만 가능하고 특수문자가 섞이면 만들기 어렵다 → 경우의 수가 너무 많아져서
- 공격자에게 Rainbow Table이 있다면, 해시 함수를 계산할 필요가 없으므로 비밀번호를 좀더 빠르게 알아낼 수 있다. • Rainbow Table을 이용한 공격에 대처하기 위해서는 비밀번호를 충분히 길게, 숫자, 특수 문자를 섞어서 정하도록 해야 한다.
- stretchig
- 저속 함수를 만들기 위해서이다
- PW + salt 에 해시함수를 여러 번 적용시키는 방법
비밀번호 결정 방법
- 가장 좋은 비밀번호 : 사용자는 외우기 좋지만, 공격자는 추측하기 힘든 비밀번호
- 비밀번호 추측 기술이 발달되어서.. 사용자에게 어려운 비번 만들라고 요구 중
- 알려진 비밀번호 추측 방법
- 사용자의 이름, 머리글자, 계좌명, 그 밖의 신상정보 시도
- 여러 사전에 나오는 단어를 시도
- 1/2단계에 나온 단어를 다양하게 조합
- 이 절차에는 첫 문자를 대문자나 제어문자로 만들기
- 단어 전체를 대문자로 만들기
- 단어 순서를 거꾸로 하기
- 문자 “o”를 숫자 “0”으로 바꾸기 등
- 위의 방법대로 하면 25% 성공률로 비밀번호를 알아낼 수 있었다.
- 따라서 PW 생성/관리 Tool을 이용하는 것이 바람직하다.
- 잊어버리지 않게 하기 위해 적절한 곳에 메모하고 메모도 철저하게 관리해야 한다.
- 만드는 방법 (4가지)
- User education
- 단순히 사용자에게 비밀번호 만드는 방법을 알려주는 것
- 뭐뭐 넣으세요~
- Computer-generated passwords
- 컴퓨터가 생성해서 전달해주는 방법
- 이거 쓸래?
- Reactive password checking
- 시스템이 비밀번호 크래킹 프로그램을 구동하여 비밀번호를 알아내도록 시도한다. → 시스템이 크래킹을 성공하면, 사용자에게 알려주고 비밀번호를 바꾸도록 강제한다
- 크래킹 프로그램 : 내가 정한 PW를 컴퓨터가 자체적으로 추측해보는 프로그램
- user education의 연장
- Proactive password checking
- 사용자에게 비밀번호를 선택하게 하고, 시스템이 비밀번호의 안전성을 검사한다.
- 현재 널리 사용되는 방법
- user education의 연장
- 크래킹 ↔ 해킹 : 해킹은 금지된 행위를 깨서 할 수 있게 만드는 것, 해킹에 범죄 행위가 추가되면 크래킹이 된다. 해킹은 범죄/비범죄 행위가 있지만 크래킹은 그냥 다 범죄 행위이다.
Bloom filter
- 원소가 집합에 속하는지 여부를 검사하는데 사용되는 확률적 자료 구조
- 어떤 데이터가 그 집합의 원소인지 판별 → 시간이 더 오래걸려서 overhead도 생긴다.
- 사용자가 금지된 비밀번호를 사용하지 못하게 하는데 효율적이다. (비밀번호의 사용 가능 여부 확인) → 위의 문제를 해결하기 위해 bloomfilter을 사용한다.
- 현재 Linux에서도 사용되고 있다.
- Bloom Filter에 원소 추가 과정 : Bloom filter을 쓰려면 먼저 만들어야 한다.
'Computer Science > Network Security' 카테고리의 다른 글
[CS][알기 쉬운 정보보호개론 3판] Chapter14. 이메일 보안 (0) | 2023.12.06 |
---|---|
[CS][알기 쉬운 정보보호개론 3판] Chapter13. 난수 (1) | 2023.12.06 |
[CS][알기 쉬운 정보보호개론 3판] Chapter11. 인증서 (0) | 2023.12.06 |
[CS][알기 쉬운 정보보호개론 3판] Chapter10. 디지털 서명 (0) | 2023.12.06 |
[CS][알기 쉬운 정보보호개론 3판] Chapter09. 메세지 인증 코드 (MAC) (0) | 2023.12.06 |