대칭키/공개키 암호, MAC, 전자서명 등의 암호기술을 사용하려면 반드시 키(Key)라 불리는 큰 수가 필요하다.
키 공간(Key-space)의 크기는 크면 클수록 brute force 공격에 강해진다.
세션키와 마스터 키
통신 때마다 한 번만 사용되는 키를 세션 키(session key)라 하고, 반복적으로 사용되는 키를 마스터 키(master key)라 부른다.
CEK와 KEK
사용자가 직접 이용하는 정보를 암호화하는 일반적인 키를 CEK(Contents Encrypting Key)라 부르고 키를 암호화하는 키를 KEK(Key Encrypting Key)라 부른다.
패스워드를 기초로 한 암호(PBE)
-Salt의 역할
salt는 의사 난수 생성기로 만들어지는 랜덤한 수로, KEK를 만들 때에 패스워드와 함께 일방향 해시함수에 입력된다.
사전 공격(Dictionary attack) 또는 레인보우 테이블을 이용한 공격을 막기 위해 존재한다.
salt를 사용하지 않은 경우에는 공격자가 패스워드에 대응하는 KEK 값을 미리 계산하여 사전 공격 등을 활용할 수 있지만 salt를 사용하면 패스워드마다 다른 salt 값으로 KEK값이 다르게 나오기 때문에 사전 공격이 불가능해진다.
-PBKDF(Password-based key derivation function)
PBKDF는 비밀번호, 반복횟수, 생성하고자 하는 비밀키의 길이를 입력으로 비밀키를 출력한다.
salt는 난수발생기 등을 이용해 생성하고 최소 128비트 이상의 길이를 사용하는 것을 권고한다. 반복횟수는 최소 1000번 이상을 권고한다.
암호키는 서버 또는 하드웨어 토큰에 저장되어질 수 있다. 암호키를 저장하는 서버는 웹 서버 또는 DB 서버와 같은 서버일 수 있으나 물리적으로 분리되어 있는 서버를 권고한다.
하드웨어 토큰은 저장된 정보가 위·변조 또는 외부로 노출되기 어려운 장치로 스마트카드, USB 토큰 등의 보안토큰을 의미한다.
난수
난수는 암호기술 중에서 중요한 역할을 담당한다.
·키의 생성 : 대칭키 암호나 메시지 인증 코드에서 사용
·키쌍의 생성 : 공개키 암호나 전자서명에서 사용한다.
·초기화 벡터(IV)의 생성 : 블록 암호 모드인 CBC, CFB, OFB에서 사용
·비표(nonce)의 생성 : replay 공격 방지나 CTR 모드 등에서 사용
·salt의 생성 : PBE 등에서 사용
·OTP : 패딩에 사용되는 열을 생성하는데 사용
- 난수의 성질
난수의 성질은 3가지로 분류되며 아래로 갈수록 엄격한 조건이 된다.
·무작위성 : 통계적인 편중 없이 수열이 무작위로 되어 있는 성질
·예측 불가능성 : 과거의 수열로부터 다음 수를 예측할 수 없다는 성질
·재현 불가능성 : 같은 수열을 재현할 수 없다는 성질. 재현하기 위해서는 수열 그 자체를 보존해야 한다.
-의사난수(pseudo random number) 생성기
하드웨어로 난수를 생성할 경우 예측이나 재현이 사실상 불가능한 자연 현상을 센서로 감지해서 그 결과를 기초로 난수열을 생성한다. 이 같은 하드웨어를 난수생성기(RNG)라 부른다.
난수를 생성하는 소프트웨어는 의사난수 생성기(PRNG)라 부른다. 소프트웨어는 진정한 난수를 생성할 수 없기 때문에 의사 난수 생성기라 부른다.
의사난수 생성기는 내부상태(의사난수 생성기가 관리하고 있는 메모리 값)를 가지며 외부에서 주어진 종자(seed)를 기초로 의사난수열을 생성한다.