반응형

KISA, 개인정보 암호화 구현 방법 쉽게 이해할 수 있는 안내서 발간

 

최근 대형 개인정보 유출사고의 발생 빈도가 잦아지고 개인정보보호 관련 법이 강화되면서 기법, 공공기관은 물론 소규모 개인 사업자들까지 암호에 대한 관심이 높아지는 가운데, KISA가 개인정보의 안전한 저장을 위해 암호기술을 구현하고자 하는 업계 실무자에게 암호기술 구현 방법을 쉽게 알려주는 '암호기술 구현 안내서'를 11월 29일 발간했다. KISA는 보다 다양한 정보를 제공하고자 지난 8월부터 이동통신사, 주요 포털사이트 및 개임 업체 등의 실무담당자들과 한국암호포털 등 암호기술 관련 전문가들의 경로를 거쳐 안낸서를 제작하게 됐다.

 

 

 

이번에 KISA가 발간한 ‘암호기술 구현 안내서’는 ▲암호화가 필요한 개인정보의 종류와 이에 대한 법적 근거 ▲개인정보별로 적용이 필요한 암호기술 및 적용 시나리오 ▲암호키 관리 방법 ▲안전한 비밀번호의 생성·변경·이용·검증방법 등이 담겨있다.


특히, 개발자들이 참고할 수 있도록 사용자 비밀번호와 주민등록번호를 암호화하는 예시를 소스코드와 함께 제공하고 있으며, 암호기술 구현이 불가한 영세 업체들을 위해 예시에 사용된 암호 소스코드의 라이브러리도 함께 보급할 예정이라고 KISA는 밝혔다.


서종렬 KISA 원장은 “암호에 대한 관심은 높아졌지만, 여전히 일부 업체에서는 안전성을 담보할 수 없는 취약한 암호기술을 별 의심 없이 사용하거나, 잘못된 방법으로 암호기술을 구현하는 등 문제점이 많다”며 “이번 안내서 발간을 통해 안전한 암호기술 구현방법이 널리 공유돼 보다 안전하게 개인정보를 보호 할 수 있게 되기를 바란다”고 말했다.

 

 

『암호기술 구현 안내서』
  - 주요 내용 요약 - 

 

 

1. 배경 및 목적
최근 인터넷을 통한 개인정보 유출 사고가 빈번해지면서 개인정보 암호화 여부 뿐만 아니라, 개인정보 암호화에 이용된 암호기술의 안전성에 대한 논란이 일고 있다. 개인정보보호를 위해 자체적으로 암호기술을 도입·구현시, 안전하지 않은 암호기술을 도입하거나 구현을 잘못 한 경우에는 개인정보를 암호화했을 지라도, 여전히 개인정보 노출의 가능성이 있기 때문이다.

 

『암호기술 구현 안내서』는 이와 같은 개인정보 노출 가능성을 최소화하기 위한 안전한 암호기술들을 소개하고, 이러한 암호기술을 안전하게 구현하는 방법도 함께 제시하고 있다.

 

 

2. 대상
『암호기술 구현 안내서』는 정보통신망법, 개인정보보호법 등에서 개인정보 보호 의무를 가지는 기업 및 기관, 단체 등의 개발자들에게 암호기술을 구현하기 위한 방법을 제시하고 있다.

 


3. 주요 내용

3.1 암호화가 필요한 정보의 종류
암호화가 필요한 정보는 암호화된 정보를 다시 복원할 수 없어야 하는 정보와 암호화된 정보를 다시 복원할 수 있어야 하는 정보들로 분류한다.
⊙ 암호화된 정보를 다시 복호화할 수 없어야 하는 정보 ⇒ 비밀번호 등
 ※ 개인정보의 소유자를 제외하고는 개인정보 관리자를 포함한 그 누구도 암호화된 정보의 원래 정보가 무엇이었는지 알 수 없어야 하는 정보들
⊙ 암호화된 정보를 다시 복호화할 수 있어야 하는 정보 ⇒ 바이오 정보, 주민등록번호, 신용카드번호, 계좌번호, 여권번호, 운전면허번호, 외국인등록번호 등
 ※ 저장 시에는 암호화하나, 사용 시에는 복호화하여 원래 정보를 알 수 있어야 하는 정보들


 

 

관련 근거 법령


◇ 개인정보의 기술적·관리적 보호조치 기준
   제6조(개인정보의 암호화) ① 정보통신서비스 제공자등은 비밀번호 및 바이오정보는 복호화 되지 아니하도록 일방향 암호화하여 저장한다. ② 정보통신서비스 제공자등은 주민등록번호, 신용카드번호 및 계좌번호에 대해서는 안전한 암호알고리듬으로 암호화하여 저장한다.


◇ 개인정보의 안전성 확보조치 기준
   제7조(개인정보의 암호화) ① 영 제21조 및 영 제30조제1항제3호에 따라 암호화하여야 하는 개인정보는 고유식별정보, 비밀번호 및 바이오정보를 말한다. ③ 개인정보처리자는 비밀번호 및 바이오정보는 암호화하여 저장하여야 한다. 단 비밀번호를 저장하는 경우에는 복호화되지 아니하도록 일방향 암호화하여 저장하여야 한다.

 

 

3.2 암호화가 필요한 정보의 종류에 따른 암호기술
개인정보 암호화에 적용 가능한 암호기술은 개인정보의 저장 시 요구되는 기술과 개인정보 송·수신 시 요구되는 기술로 분류할 수 있다.

 

□ 개인정보 저장 시 요구되는 기술
  - 비밀번호 등 암호화된 정보를 다시 복원할 수 없어야 하는 정보는 일방향 해쉬함수를 이용
  - 주민등록번호 등 다시 복원할 수 있어야 하는 정보는 블록암호 알고리즘을 이용


⊙ 일방향 해쉬함수 ⇒ 비밀번호 등에 적용(다시 복호화할 수 없는 정보 저장 시)
   보안강도별 해쉬함수 분류

 

 

 

 

 

 

※ 권고 해쉬함수는 ’11년 현재 기준으로 선정되었으며, IT환경(컴퓨팅 파워, 해킹 능력 등)이 변화하면 달라질 수 있다.

※ 현재 많은 응용에서 사용되고 있는 SHA-1은 알고리즘 변경에 따른 비용, 구축 시간 등을 고려하여 2013년까지 112비트 이상의 보안 강도를 가지는 해쉬함수로 변경 권고


⊙ 블록암호 알고리즘 ⇒ 바이오 정보, 주민등록번호, 신용카드번호, 계좌번호, 여권번호, 운전면허번호, 외국인등록번호 등에 적용(다시 복호화할 수 있는 정보 저장 시)

 

보안강도별 블록암호 알고리즘의 사용 권고 기간

 

 

 

 

 

 

※ 권고 알고리즘은 ’11년 현재 기준으로 선정되었으며, IT환경(컴퓨팅 파워, 해킹 능력 등)이 변화하면 달라질 수 있다.

 

□ 개인정보 송·수신시 요구되는 기술
  - SSL 및 TLS와 같은 통신 암호기술 또는 응용프로그램에서 제공하는 암호화 방법을 사용
 ※ 웹서버에서 SSL/TLS 등의 보안 통신 기능을 적용하기 위한 보다 상세한 정보는 한국인터넷진흥원에서 발간한 「보안서버 구축 안내서」를 참조

 

 

3.3 암호기술 적용을 위한 시나리오

앞서 기술한 암호기술을 적용하기 위한 시나리오를 소개한다.
 
□ 해쉬함수 신규 적용 시나리오
비밀번호와 같이 일방향 해쉬함수가 필요한 정보에 대하여 신규로 해쉬함수를 적용하는 경우, 다음과 같이 처리할 수 있다.

 

 

 

 


비밀번호에 Salt라는 비밀값을 추가하여 해쉬함수에 적용하게 되는데, 이는 단순히 비밀번호만을 일방향 해쉬함수에 적용할 경우 비밀번호 사전공격에 취약할 수 있는 문제를 해결하기 위한 것이다. Salt를 추가하는 방법은 다양한 방식을 활용할 수 있으며, 선택한 방법은 외부에 노출되지 않도록 해야 한다.

 

 

hash ( SALT || 비밀번호 || SALT )                           hash ( SALT || hash (비밀번호))
hash ( 비밀번호 || hash ( 비밀번호 || SALT))            hash ( hash (SALT) || hash (비밀번호))
hash1 ( hash2 ( 비밀번호 || SALT))

 


특히, Salt는 사용자마다 랜덤하게 생성하여 사용하여 할당된 비트열 등과 같이 해커가 예측하기 어렵고 언제라도 변경 가능한 값을 사용할 것을 권고한다.

 

□ 해쉬함수 변경 적용 시나리오
해쉬함수를 변경하기 위해서는 암호화되기 전 원래의 비밀번호를 알아야 하는데, 해쉬된 비밀번호는 복호화가 불가능하므로 모든 사용자가 비밀번호를 다시 입력한 후 이를 새로운 해쉬함수로 해쉬하여 저장하여야 한다. 그러나 모든 사용자의 비밀번호를 일시에 다시 입력받는 것은 불가능하므로 사용자가 다시 로그인하여 비밀번호를 입력하기 전까지는 자체적으로 과거에 해쉬되어 저장된 비밀번호에 변경된 안전한 해쉬함수를 적용해놓아야 한다.

 

 

 

이렇게 비밀번호가 새로운 해쉬함수로 두 번 해쉬되어 저장된 이후에 사용자가 로그인하여 비밀번호를 입력하면, 이 비밀번호를 새로운 해쉬함수로 한 번만 해쉬하여 저장하는 작업을 수행해야 한다. 이를 위한 절차는 다음과 같다.


①  사용자가 비밀번호를 입력하면 웹 서버는 사용자가 입력한 비밀번호에 MD5(기존에 쓰던 취약한 해쉬함수) → SHA-256(변경된 안전한 해쉬함수) 순서로 두 번의 해쉬함수를 적용한 해쉬값(해쉬값 a)과 SHA-256으로 한번만 해쉬함수를 적용한 해쉬값(해쉬값 b)을 생성한다.
② 해쉬값 a가 기존에 저장되어 있던 해쉬값과 동일한지 확인한다.
③  ②의 값이 동일한 경우, 서버는 해당 사용자가 정당한 사용자라고 판단하고, 기존 두 번 해쉬된 값 대신 ①에서 생성한 해쉬값 b를 사용자의 비밀번호 해쉬값으로 다시 저장한다.

 

□ 블록암호 알고리즘 신규 적용 시나리오
주민등록번호 등에 대해서 신규로 블록암호 알고리즘을 적용하는 시나리오는 다음 그림과 같다. 이 때, 암호화에 사용되는 비밀키는 본 안내서에서 제시한 방법을 통해 안전하게 보관되어 쉽게 노출되지 않도록 하여야 한다.

 

 

 

 

□ 블록암호 알고리즘 변경 적용 시나리오
블록암호 알고리즘을 변경하고자 하는 경우에는 기존 DB에 암호화 되어 저장되어 있던 암호문들을 복호화 한 후, 새로운 암호 알고리즘으로 암호화하여 다시 DB에 저장한다. 이 때 비밀키는 기존 비밀키과 다른 것으로 새롭게 생성하여 사용한다.

 

 

 

 


3.4 안전한 비밀번호의 생성·변경·이용·검증 방법
⊙ 안전한 비밀번호 생성 
- 안전한 비밀번호는 제3자가 쉽게 추측할 수 없으며, 시스템에 저장되어 있는 사용자 정보 또는 인터넷을 통해 전송되는 정보를 해킹하여 알아낼 수 없거나, 알아낸다 하더라도 많은 시간이 요구됨
 

 

<안전한 비밀번호의 문자구성 및 길이 조건>
   -  3가지 종류 이상의 문자구성으로 8자리 이상의 길이로 구성된 비밀번호
   -  2가지 종류 이상의 문자구성으로 10자리 이상의 길이로 구성된 비밀번호
      ※ 문자 종류는 알파벳 대문자와 소문자, 특수기호, 숫자의 4가지임

 

⊙ 비밀번호 변경
- 업체는 모든 사용자에게 주기적(3개월에서 6개월 이하)으로 비밀번호를 변경하도록 유도하여 비밀번호의 노출 위협을 최소화

 

⊙ 비밀번호 이용
- 사용자 비밀번호는 해쉬 함수를 적용하여 저장
- 오직 인가된 관리자만이 사용자의 비밀번호가 저장된 시스템에 접근할 수 있어야 하며, 해당 시스템은 외부의 침입으로부터 안전한 장소에 보관

 

⊙ 비밀번호 검증 
- 서비스 종류, 취급하는 개인정보의 종류, 개인정보 노출시 파급 효과 등을 고려하여 적합한 비밀번호 정책을 수립하고 공시해야 하며, 비밀번호 정책에는 최소 비밀번호 길이 및 문자조합, 변경 주기 등을 포함
- 사용자 비밀번호가 자사의 비밀번호 정책을 만족하는지 확인할 수 있는 비밀번호 검증 기능을 구현하여 적용해야 함
  ※ 비밀번호에 대한 검증은 KISA에서 배포하는 「비밀번호 검증 S/W」를 활용

 

 

 

 

 

3.5 암호키 관리 방안
암호키 관리는 암호를 효과적으로 사용하기 위해 필수적인 요소이다. 만약 암호키가 공격자에게 노출되었다면 공격자는 해당 암호문을 쉽게 복호할 수 있기 때문이다. 
즉, 암호키 관리를 잘못하는 경우 아무리 보안성 높은 암호 알고리즘을 적용하는 경우에도 암호화된 중요 정보가 쉽게 노출될 수 있다.

⊙ 암호키 사용기간 및 유효기간 
- 암호키는 보안을 위해 사용기간과 유효기간을 구분할 필요가 있음
  ※ 암호키의 사용기간은 사용자 또는 관리자가 암호키를 사용할 수 있도록 허용된 기간, 유효기간은 사용기간이 완료된 이후라도 추후 복호화를 위해 해당 암호키를 사용하도록 허용된 기간임
- 키의 사용기간 및 유효기간을 설정할 때는 키 노출을 야기하는 위험 요소와 키 노출에 따른 비용 등을 고려해야 함
- 암호키의 사용기간은 최대 2년, 유효기간은 최대 5년으로 설정

⊙ 암호키 생성 방법의 예 
- 암호키를 생성하는 방법은 비밀번호, 난수발생기 등을 이용하는 다양한 방법들이 있으며 RSA, NIST 표준 등 참조 가능

⊙ 암호키 저장 방법의 예
- 암호키는 서버 또는 하드웨어 토큰에 저장될 수 있으며, 암호키를 저장하는 서버는 웹서버 또는 DB 서버와 같은 서버일 수 있으나, 물리적으로 분리되어 있는 서버를 사용하는 것을 권고
   ※ 하드웨어 토큰은 저장된 정보가 위·변조 또는 외부로 노출되기 어려운 장치로, 스마트카드, USB 토큰 등의 보안토큰(HSM, Hardware Security Module)을 의미

 

 

 

<예제1. 서비스 및 DB에서 사용되는 암호키>
 쪾하나의 암호키를 사용하는 경우, 암호키는 서버 또는 하드웨어 토큰에 저장. 만일, 사용 중인 서버가 Trusted Platform Module(TPM)을 지원한다면 TPM에 저장
 쪾두 개 이상의 암호키생성키를 사용하는 경우, 각각의 암호키생성키들을 물리적으로 다른 공간에 저장. 즉, 하나의 암호키생성키는 서버에, 다른 암호키생성키는 하드웨어 토큰에 저장하여 사용
 
<예제2. 직원 PC에서 사용되는 암호키>
 쪾한명의 사용자가 한 개의 암호키를 사용하는 경우(개인PC), 비밀번호를 기반으로 암호키를 생성하는 표준 암호키 생성 방법에 따라 암호키 생성하여 사용하면, 암호키 저장이 필요하지 않음
 쪾다수의 사용자가 한 개의 암호키를 사용하는 경우(공용PC), 해당 암호키를 사용자마다 다른 “사용자별암호키”로 다시 암호화하는 방법 이용.


   ※ 사용자별암호키는 표준 패스워드기반 암호키 생성 방법으로 생성할 수 있으며, 이때 사용되는 비밀번호는 사용자마다 각각 다른 비밀번호를 사용해야 함

 

 

 

3.6 암호기술 구현 방법
해쉬함수 SHA-256와 블록암호 알고리즘 SEED에 대한 암호라이브러리를 이용해 웹사이트에서 개인정보를 입력받아 해쉬 및 암호화하는 예시를 소개한다.


특히, 안내서에서는 개발자들이 참고할 수 있도록 위 두 예시에 대한 HTML 소스를 제공하고 있으며, 실제 개인정보를 해쉬 또는 암호화해서 DB에 저장하기 위해 HTML 소스를 변경해야 하는 부분도 따로 표시하고 있다.


 ※ 예시에 대한 HTML 소스는 개인정보 해쉬 및 암호화해서 웹페이지로 출력하는 형태임

KISA는 안내서에서 소개하고 있는 블록암호 알고리즘 SEED(CBC 운영모드) 및 해쉬함수 SHA-256의 ASP, JSP용 암호라이브러리를 배포하고 있다.

 

4. 기대 효과 및 향후 계획
개인정보보호법 시행 등으로 개인정보를 암호화해야 하는 대상의 수가 기하급수적으로 증가함에 따라, 개인정보를 안전하게 암호화하기 위한 방법을 제시하는 본 안내서의 활용이 증가할 것으로 예상된다. 특히, 암호화 관련 전문지식이 없는 업체의 경우, 본 안내서와 함께 배포하는 암호라이브러리를 활용해 보다 손쉽게 개인정보 암호화 기능을 구현할 수 있을 것으로 기대된다.

 

본 안내서는 KISA의 암호이용활성화(ssed.kisa.or.kr) 등을 통해 상시 보급될 예정이며, KISA는 영세 업체 등의 개인정보 암호화를 기술적으로 지원하기 위한 추가적인 안내서를 지속적으로 개발·보급할 예정이다.

 

 

 

글/전인경(KBA 연구개발팀 책임연구원)

 

,