KR20150103394A - 암호화 시스템 및 그것의 암호 통신 방법 - Google Patents

암호화 시스템 및 그것의 암호 통신 방법 Download PDF

Info

Publication number
KR20150103394A
KR20150103394A KR1020140024807A KR20140024807A KR20150103394A KR 20150103394 A KR20150103394 A KR 20150103394A KR 1020140024807 A KR1020140024807 A KR 1020140024807A KR 20140024807 A KR20140024807 A KR 20140024807A KR 20150103394 A KR20150103394 A KR 20150103394A
Authority
KR
South Korea
Prior art keywords
value
encryption
key
nonce
authentication
Prior art date
Application number
KR1020140024807A
Other languages
English (en)
Inventor
장동훈
Original Assignee
장동훈
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 장동훈 filed Critical 장동훈
Priority to KR1020140024807A priority Critical patent/KR20150103394A/ko
Publication of KR20150103394A publication Critical patent/KR20150103394A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

본 발명의 실시 예에 따른 암호화 시스템의 안전한 암호 연산 방법은, 제 1 기반 암호 함수에서 암호 연산을 수행하는 단계; 상기 제 1 기반 암호 함수에서 연산한 값과 제 1 부가적인 정보를 이용하여 제 1 부채널 방지 외부 연산을 수행하는 단계; 상기 1 부채널 방지 외부 연산 과정으로부터 산출된 값과 제 2 부가적인 정보를 이용하여 제 2 부채널 방지 연산을 수행하는 단계; 및 제 2 암호함수에서 상기 제 2 부채널 방지 연산된 값을 이용하여 상기 기반 암호 함수에서 암호 연산을 수행하는 단계를 포함한다. 본 발명에 의하면, 안전한 암호 통신을 위하여 부채널 대응 기법의 비용을 획기적으로 낮출 수 있다.

Description

암호화 시스템 및 그것의 암호 통신 방법{CRYPTOGRAPHY SYSTEM AND CRYPTOGRAPHIC COMMUNICATION METHOD THEREOF}
본 발명은 암호화 시스템에 관한 것으로, 좀 더 자세하게는 안전한 통신 환경을 위한 암호화 시스템 및 그것의 암호 통신 방법에 대한 것이다.
최근 스마트폰 등 스마트 디바이스에 대한 부채널 취약점 공격에 대한 확대가 예상되며, 부채널 공격 기술은 점차 준전문가 저비용 공격 기술로의 변화로 말미암아, 고등 부채널 대응 기법에 대한 요구가 증가하고 있다. 하지만, 고등 부채널 대응을 위해 기존의 대응 기법을 적용할 경우 심하게는 300배에서 500배의 성능 저하가 있어서 실제로 사용이 불가능한 상황이며, 따라서 성능 저하를 고도화할 수 있는 신규 부채널 방지를 위한 원천 기술의 확보가 필요하다.
배터리가 필요 없는 교통 카드처럼 인증 및 지불 용도로만 사용할 경우, 주고 받는 데이터 양이 적기 때문에, 성능 저하의 체감도가 낮을 수 있으나, 통신의 효율성이 중시되는 통신 환경에서의 안전한 암호 통신의 구현은 현존하는 방식으로 구현이 불가능하다. 무엇보다, 배터리에 기반하여 에너지 소비에 매우 민감한 구현 환경의 경우, 현존하는 부채널 대응 기법 적용에 따른 상당한 에너지 손실에 의해 실용성 및 가용성 측면에서 큰 타격을 입게 된다.
위처럼 300배에서 500 배의 성능 저하를 가져오는 근본 이유는 암호, 복호화 및 인증 등을 위한 설계 기법의 암호학적 복잡성에 기인한다. 예를 들면, 블록암호 기반 암호화 (또는 블록 암호 기반 암호화 운영 모드)의 경우, 부채널 대응 기법 비용 중 블록 암호 자체에 대한 대응 기법 비용이 대부분을 차지한다. 그 이유는 블록 암호에 사용된 비밀 키를 보호하기 위하여 블록 암호 연산 전체 과정에 대한 부채널 대응 기법 적용이 요구되기 때문이다. 동시에 공격 기법이 준 전문가용, 저비용, 고도화됨에 따라 단위 연산 당 적용해야 할 부채널 대응 기법 비용이 지속적으로 증가하기 때문이다. 이로 인하여, M2M, 의료기기, 스마트기기, RFID 등과 같이 구현 환경에 제약이 있는 경우에 대해 저비용, 효율성, 안전성을 제공할 수 있는 설계 논리 및 구현 기법 마련에 대한 연구가 시급한 상황이다.
현존하는 암호화 및 인증 코드 값 생성 방식들은 기반이 되는 알고리즘이 부채널 공격에 안전하게 구현되어야 한다는 근본적인 문제점을 지니고 있다. 이러한 근본적인 문제점을 안고 가는 이상, 부채널 공격에 대해 저비용, 고효율, 고 안전성을 갖는 구현 방법은 사실상 없는 상황이다.
또한, 기존의 대부분의 암호인증 기법은 암호문의 변조 유무를 파악하기 위한 메모리 사용 요구량에 대한 기준 없이 개발되어 사용되어 왔다. 해킹 등 다양한 공격 기법의 발달로 인하여 암호 모듈에 대한 필요성이 대두됨에 따라 암호 모듈에 기반한 암호인증 기법이 중요하게 되었다. 하지만, 현존하는 대부분의 암호인증 기법은 암호문 변조 검증 시 메모리 사용에 대한 언급이 없으며, 무엇보다 이들 대부분의 암호인증 기법은 대상이 되는 암호문의 크기가 길어짐에 따라 요구되는 메모리 크기 양도 증가한다. 따라서 효율적으로 동시에 적은 메모리 사용량으로 암호문 변조를 검증하고 안전하게 평문을 출력하는 기법에 대한 개발이 요구된다.
본 발명에서는 운영 모드 차원에서 접근하고자 한다. 어떻게 하면, 기반 알고리즘에 대한 부채널 대응 기법 적용 없이 운영 모드 차원에서의 대응만으로 안전성을 제공할 수 있는가에 대한 것이다. 즉, 본 발명에서는 구현을 어떻게 안전하게 할 것인가에 초점을 맞춘 것이 아니라, 구현의 대상이 되는 암호 연산을 어떻게 정의해야 부채널 공격에 효율적으로 대응할 수 있을까 하는 것에 초점을 맞춘다. 본 발명에서는, 운영 모드 차원에서, 부채널 공격에 대해 저비용, 고 효율성, 고 안전성을 제공하는 암호화 및 MAC 값 생성하는 암호 연산 설계 논리 및 구현 방식을 제안한다.
본 발명에서는 신규 암호, 복호화, 인증 등의 설계 기법을 제안한다. 이는 현존하는 알려진 모든 기술들과 달리, 기반 함수가 되는 블록암호 또는 블록 암호의 일부 , 치환 함수 또는 치환 함수의 일부, 압축 함수 또는 압축 함수의 일부 등에 대한 부채널 공격에 대한 대응 기법 적용이 없이도, 단지 기반 함수 외부에 적용된 매우 단순한 연산들을 보호만 해도 전체 암호, 복호화, 인증 등의 설계 기법이 부채널 공격에 강한 안전성을 제공하는 설계 사상을 설명하고, 구체적으로 이에 대한 실시 예들을 제시한다. 또한, 보호해야할 연산 수를 아예 0으로 줄이는 설계 사상 및 구체적인 실시 예를 제시한다.
또한, 메모리의 크기가 제약이 있는 경우에 대해서, 긴 메시지에 대한 암화화 및 인증을 수행하는 설계 사상 및 구체적인 실시 예를 제시한다.
본 발명의 실시 예에 따른 암호화 시스템의 안전한 암호 연산 방법은, 제 1 기반 암호 함수에서 암호 연산을 수행하는 단계; 상기 제 1 기반 암호 함수에서 연산된 값과 제 1 부가적인 정보를 이용하여 제 1 부채널 방지 외부 연산을 수행하는 단계; 상기 1 부채널 방지 외부 연산 과정으로부터 산출된 값과 제 2 부가적인 정보를 이용하여 제 2 부채널 방지 연산을 수행하는 단계; 및 제 2 암호함수에서 상기 제 2 부채널 방지 연산된 값을 이용하여 상기 기반 암호 함수에서 암호 연산을 수행하는 단계를 포함한다.
상술한 바와 같이 본 발명을 통해에 따른 간단한 논리 연산을 이용하여 기반 암호 함수 대신 외부 연산 과정을 보호하는 데에 초점을 맞추므로 전체 암호 시스템을 부채널 공격으로부터 저비용, 고 안전성, 고 효율성을 갖는 방식으로 보호할 수 있다. 또한, 본 발명에 따른 논리 연산을 이용하여 저 메모리로 암호인증 기법을 암호 모듈에서 안전하게 구현하여 비밀 정보를 안전하게 기반 함수를 보호할 수 있다. 부채널 공격으로부터 기반 함수를 보호할 수 있다.
도 1은 본 발명에서 고려하는 구현 환경 모델을 보여주는 도면이다.
도 2는 일반적인 부채널 공격 방지 기법이 적용된 암호 시스템의 구조를 보여주는 도면이다.
도 3은 본 발명의 실시 예에 따른 신규 암호 시스템의 안전성을 위해 기반이 되는 암호 함수에 대한 부채널 방지 기법 적용 없이도 단지 외부 연산 과정에 대한 부채널 방지 기법 적용만으로 신규 암호 시스템이 안전함을 기반 함수에 대한 부채널 공격 방지를 개념적으로 설명하는 도면이다.
도 4는 블록 암호 기반 암호인증 방식에서 공유한 키 K를 이용하여 난스 열을 생성하는 방식을 보여준다.
도 5는 블록 암호 기반 암호인증 방식에서 난스 열 중의 하나의 난스를 N으로 표현했을 때, 난스로부터 마스크 열을 생성하는 방식을 보여준다.
도 6는 블록 암호 기반 암호인증 방식에서, 도 4과 도 5에서 제시된 난스 열과 마스크 열을 이용하여 공유한 키 K를 이용한 첫 번째 암호화 및 인증 방식을 보여준다.
도 7은 블록 암호 기반 암호인증 방식에서, 도 6에서 제시한 첫 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 8은 블록 암호 기반 암호인증 방식에서, 도 4과 도 5에서 제시된 난스 열과 마스크 열을 이용하여 공유한 키 K를 이용한 두 번째 암호화 및 인증 방식을 보여준다.
도 9는 블록 암호 기반 암호인증 방식에서, 도 8에서 제시한 두 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 10은 블록 암호 기반 암호인증 방식에서, 도 4에서 제시된 난스 열을 이용하여 공유한 키 K를 이용한 세 번째 암호화 및 인증 방식을 보여준다.
도 11은 블록 암호 기반 암호인증 방식에서, 도 10에서 제시한 세 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 12는 블록 암호 기반 암호인증 방식에서, 도 4에서 제시된 난스 열을 이용하여 공유한 키 K를 이용한 네 번째 암호화 및 인증 방식을 보여준다.
도 13은 블록 암호 기반 암호인증 방식에서, 도 12에서 제시한 네 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 14는 블록 암호 기반 암호인증 방식에서, 도 4에서 제시된 난스 열을 이용하여 공유한 키 K를 이용한 다섯 번째 암호화 및 인증 방식을 보여준다.
도 15는 블록 암호 기반 암호인증 방식에서, 도 14에서 제시한 다섯 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 16은 블록 암호 기반 암호인증 방식에서, 도 4에서 제시된 난스 열을 이용하여 공유한 키 K를 이용한 여섯 번째 암호화 및 인증 방식을 보여준다.
도 17은 블록 암호 기반 암호인증 방식에서, 도 16에서 제시한 여섯 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 18은 블록 암호 기반 암호인증 방식에서, 도 4에서 제시된 난스 열을 이용하여 공유한 키 K를 이용한 일곱 번째 암호화 및 인증 방식을 보여준다.
도 19는 블록 암호 기반 암호인증 방식에서, 도 18에서 제시한 여섯 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 20은 블록 암호 기반 암호인증 방식에서, 공유 키 K로부터 암호화 키 열을 생성하는 방식을 보여주는 도면으로, 이는 본 발명에서 제시된 두 가지 암호화 및 인증 방식의 안전성을 강화한다.
도 21은 블록 암호 기반 암호인증 방식에서 공유 키 K로부터 난스 열을 생성하는 방식을 보여주는 도면으로, 이는 본 발명에서 제시된 두 가지 암호화 및 인증 방식의 안전성을 강화한다.
도 22는 블록 암호 기반 암호인증 방식에서, 도 6에서 보여준 첫 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 23은 블록 암호 기반 암호인증 방식에서, 도 8에서 보여준 두 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 24는 블록 암호 기반 암호인증 방식에서, 도 10에서 보여준 세 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 25는 블록 암호 기반 암호인증 방식에서, 도 12에서 보여준 네 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 26은 블록 암호 기반 암호인증 방식에서, 도 14에서 보여준 다섯 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 27은 블록 암호 기반 암호인증 방식에서, 도 16에서 보여준 여섯 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 28은 블록 암호 기반 암호인증 방식에서, 도 18에서 보여준 일곱 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 29는 블록 암호 기반 암호인증 방식에서, 본 발명에서 앞서 보인 난스 암호화 부분을 나타낸다.
도 30은 블록 암호 기반 암호인증 방식에서, 난스 암호화를 하기 위하여, 일방향 함수 f를 이용한 방식을 보여준다.
도 31은 블록 암호 기반 암호인증 방식에서, 도 30에서 일방향 함수 f 설계 시 블록암호 E를 이용한 방식을 보여준다.
도 32는 블록 암호 기반 암호인증 방식에서, 도 26에서 보인 다섯 번째 방식을 메모리가 적은 환경에서 구현하는 방식을 보여주는 도면이다.
도 33은 블록 암호 기반 암호인증 방식에서, 도 27에서 보인 여섯 번째 방식을 메모리가 적은 환경에서 구현하는 방식을 보여주는 도면이다.
도 34는 블록 암호 기반 암호인증 방식에서, 도 28에서 보인 일곱 번째 방식을 메모리가 적은 환경에서 구현하는 방식을 보여주는 도면이다.
도 35는 치환 함수 기반 암호인증 방식에서 공유한 키 K를 이용하여 난스 열을 생성하는 방식을 보여준다.
도 36은 치환 함수 기반 암호인증 방식에서, 도 35로부터 제시된 난스 열과 공유한 키 K를 이용한 첫 번째 암호화 및 인증 방식을 보여준다.
도 37은 치환 함수 기반 암호인증 방식에서, 도 36에서 제시한 첫 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 38은 치환 함수 기반 암호인증 방식에서, 도 35로부터 제시된 난스 열과 공유한 키 K를 이용한 두 번째 암호화 및 인증 방식을 보여준다.
도 39는 치환 함수 기반 암호인증 방식에서, 도 38에서 제시한 두 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 40은 치환 함수 기반 암호인증 방식에서, 도 35로부터 제시된 난스 열과 공유한 키 K를 이용한 세 번째 암호화 및 인증 방식을 보여준다.
도 41은 치환 함수 기반 암호인증 방식에서, 도 40에서 제시한 첫 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 42는 치환 함수 기반 암호인증 방식에서, 도 35로부터 제시된 난스 열과 공유한 키 K를 이용한 네 번째 암호화 및 인증 방식을 보여준다.
도 43은 치환 함수 기반 암호인증 방식에서, 도 42에서 제시한 네 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 44는 치환 함수 기반 암호인증 방식에서 공유 키 K로부터 암호화 키 열을 생성하는 방식을 보여주는 도면이다.
도 45는 치환 함수 기반 암호인증 방식에서 공유 키 K로부터 난스 값 사이에 연관성을 줄이기 위하여 난스 열을 생성하는 방식을 보여주는 도면이다.
도 46은 치환 함수 기반 암호인증 방식에서, 도 36에서 보여준 첫 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 47은 치환 함수 기반 암호인증 방식에서, 도 38에서 보여준 두 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 48은 치환 함수 기반 암호인증 방식에서, 도 40에서 보여준 세 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 49는 치환 함수 기반 암호인증 방식에서, 도 42에서 보여준 네 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 50은 치환 함수 기반 암호인증 방식에서 난스 열을 생성하는 방식을 보여주는 도면이다.
도 51은 치환 함수 기반 암호인증 방식에서 키들 사이의 연관성이 없도록 키 열을 생성하는 방식을 보여주는 도면이다.
도 52는 치환 함수 기반 암호인증 방식에서 방식 1에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 53은 치환 함수 기반 암호인증 방식에서 방식 2에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 54는 치환 함수 기반 암호인증 방식에서 방식 3에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 55는 치환 함수 기반 암호인증 방식에서 방식 4에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 56은 치환 함수 기반 암호인증 방식에서 방식 1에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 57은 치환 함수 기반 암호인증 방식에서 방식 2에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 58은 치환 함수 기반 암호인증 방식에서 방식 3에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 59는 치환 함수 기반 암호인증 방식에서 방식 4에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 60은 치환 함수 기반 암호인증 방식에서 난스 N으로부터 N'을 생성하는 방법을 보여주는 도면이다.
도 61은 치환 함수 기반 암호인증 방식에서 방식 4를 이용하여 메모리가 제한된 경우에 대해 암호화 및 인증을 하는 방식을 보여주는 도면이다.
도 62는 압축 함수 기반 암호인증 방식에서 공유한 키 K를 이용하여 난스 열을 생성하는 방식을 보여준다.
도 63은 압축 함수 기반 암호인증 방식에서, 도 62로부터 제시된 난스 열과 공유한 키 K를 이용한 첫 번째 암호화 및 인증 방식을 보여준다.
도 64는 압축 함수 기반 암호인증 방식에서, 도 63에서 제시한 첫 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 65는 압축 함수 기반 암호인증 방식에서, 도 62로부터 제시된 난스 열과 공유한 키 K를 이용한 두 번째 암호화 및 인증 방식을 보여준다.
도 66은 압축 함수 기반 암호인증 방식에서, 도 65에서 제시한 두 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 67은 압축 함수 기반 암호인증 방식에서, 도 62로부터 제시된 난스 열과 공유한 키 K를 이용한 세 번째 암호화 및 인증 방식을 보여준다.
도 68은 압축 함수 기반 암호인증 방식에서, 도 67에서 제시한 첫 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 69는 압축 함수 기반 암호인증 방식에서, 도 62로부터 제시된 난스 열과 공유한 키 K를 이용한 네 번째 암호화 및 인증 방식을 보여준다.
도 70은 압축 함수 기반 암호인증 방식에서, 도 69에서 제시한 네 번째 방식에서 부채널 공격에 대한 안전성을 위해 보호해야 할 연산 부분을 표시한 도면이다.
도 71은 압축 함수 기반 암호인증 방식에서 공유 키 K로부터 암호화 키 열을 생성하는 방식을 보여주는 도면이다.
도 72는 압축 함수 기반 암호인증 방식에서, 도 63에서 보여준 첫 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 73은 압축 함수 기반 암호인증 방식에서, 도 65에서 보여준 두 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 74는 압축 함수 기반 암호인증 방식에서, 도 67에서 보여준 세 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 75는 압축 함수 기반 암호인증 방식에서, 도 69에서 보여준 네 번째 암호화 및 인증 방식에 헤더와 같은 부가정보를 추가로 인증하고자 하는 경우를 표현한 방식이다.
도 76은 압축 함수 기반 암호인증 방식에서 키들 사이의 연관성이 없도록 키 열을 생성하는 방식을 보여주는 도면이다.
도 77은 압축 함수 기반 암호인증 방식에서 방식 1에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 78은 압축 함수 기반 암호인증 방식에서 방식 2에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 79는 압축 함수 기반 암호인증 방식에서 방식 3에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 80은 압축 함수 기반 암호인증 방식에서 방식 4에서 부가정보 및 인증 코드의 크기를 늘리는 방식을 보여주는 도면이다.
도 81은 압축 함수 기반 암호인증 방식에서 난스 기반 암호화 및 인증 방식 위한 난스 열 생성 방식을 보여주는 도면이다.
도 82는 압축 함수 기반 암호인증 방식에서 방식 1에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 83은 압축 함수 기반 암호인증 방식에서 방식 2에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 84는 압축 함수 기반 암호인증 방식에서 방식 3에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 85는 압축 함수 기반 암호인증 방식에서 방식 4에 대해 키 없이 난스 만으로 암호화 및 인증 코드를 생성하는 방식을 보여주는 도면이다.
도 86은 압축 함수 기반 암호인증 방식에서 난스에 대한 동기화 과정 없이 암호화 및 인증 방식을 제공하기 위하여 난스 N으로부터 N'과 N''을 생성하는 방법을 보여주는 도면이다.
도 87은 압축 함수 기반 암호인증 방식에서 방식 4를 이용하여 메모리가 제한된 경우에 대해 암호화 및 인증을 하는 방식을 보여주는 도면이다.
도 88은 암호 모듈에 기반한 장치를 나타낸다.기반 함수에 대한 부채널 공격 방지를 암호 모듈 안에서의 동작 방식은 도 89에 설명한다.
도 89는 본 발명의 실시 예에 암호인증 기법 논리를 기반 함수에 대한 부채널 공격 방지를 개념적으로 설명하는 도면이다.
도 90은 함수 1에 대하여 Output 1, Nonce, Associate data를 알 경우 Key 값을 구하는 것이 어려워야 함을 보여주는 도면이다.
도 91은 함수 2에 대해 동일한 Output 2를 갖는 서로 다른 (Output 1, Plaintext)과 (Output 1', Plaintext')을 얻는 것이 어려워야 함을 보여주는 도면이다.
도 92는 함수 3에 대해 Output 2, Tag, Nonce, Associate data가 주어졌을 경우 Key를 찾는 것이 어려워야 함을 보여주는 도면이다.
도 93은 Tag 값이 동일하도록 하는 서로 다른 (Key, Nonce, Associate data, Plaintext)와 (Key', Nonce', Associate data', Plaintext')를 얻는 것이 어려워야 함을 보여주는 도면이다.
도 94는 함수 2에 대해, Output 2를 알지 않은 상태에서도 Output 1과 Ciphertext만 알아도 Plaintext를 계산할 수 있어야 함을 보여주는 도면이다.
도 95는 치환 함수 f에 기반한 암호 인증 기법의 예를 보여주는 도면이다.
도 96은 도 94에 보여준 암호인증 기법을 도 89에 제시된 본 발명에 따라 함수 1, 2, 3 부분으로 나눈 것을 보여주는 도면이다. 그리고 도 89에서 output 1에 해당하는 값은 도 969에서 (a0||b0)로 표현된다.
도 97은 Nonce를 직접 생성하지 않고 Key, Associate data, Plaintext로부터 생성하는 함수 4를 보여주는 도면이다.
도 98은 함수 4에서 키 값을 제외한 나머지 입출력 값 정보를 알 경우 키 값을 계산하는 것이 어려워야 함을 보여주는 도면이다.
도 99는 함수 4에서 동일한 출력 값을 생성하는 서로 다른 (Key, Associate data, Plaintext)과(Key', Associate data', Plaintext')를 찾는 것이 어려워야 함을 보여주는 도면이다.
도 100은 치환 함수 기반 암호인증 방식에서 방식 1에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 101은 치환 함수 기반 암호인증 방식에서 방식 2에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 102는 치환 함수 기반 암호인증 방식에서 방식 3에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 103은 치환 함수 기반 암호인증 방식에서 방식 4에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 104는 압축 함수 기반 암호인증 방식에서 방식 1에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 105는 압축 함수 기반 암호인증 방식에서 방식 2에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 106은 압축 함수 기반 암호인증 방식에서 방식 3에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 107은 압축 함수 기반 암호인증 방식에서 방식 4에서 난스 값을 해쉬 하는 경우에 대한 방식을 보여주는 도면이다.
도 108은 블록암호 기반 암호인증 방식에서 첫번째 메시지 블록을 고정된 상수 값으로 사용하는 방식을 보여주는 도면이다.
도 109는 치환함수 기반 암호인증 방식에서 첫번째 메시지 블록을 고정된 상수 값으로 사용하는 방식을 보여주는 도면이다.
도 110은 압축함수 기반 암호인증 방식에서 첫번째 메시지 블록을 고정된 상수 값으로 사용하는 방식을 보여주는 도면이다.
도 111은 ECB 암호 모드를 보여주는 도면이다.
도 112는 부채널 공격에 강한 안전성을 제공하게끔 변형된 ECB'암호 모드를 보여주는 도면이다.
도 113은 CBC 암호 모드를 보여주는 도면이다.
도 114는 부채널 공격에 강한 안전성을 제공하게끔 변형된 CBC'암호 모드를 보여주는 도면이다.
도 115는 PCBC 암호 모드를 보여주는 도면이다.
도 116은 부채널 공격에 강한 안전성을 제공하게끔 변형된 PCBC' 암호 모드를 보여주는 도면이다.
도 117은 CFB 암호 모드를 보여주는 도면이다.
도 118은 부채널 공격에 강한 안전성을 제공하게끔 변형된 CFB' 암호 모드를 보여주는 도면이다.
도 119는 OFB 암호 모드를 보여주는 도면이다.
도 120은 부채널 공격에 강한 안전성을 제공하게끔 변형된 OFB' 암호 모드를 보여주는 도면이다.
도 121은 CTR 암호 모드를 보여주는 도면이다.
도 122는 부채널 공격에 강한 안전성을 제공하게끔 변형된 CTR' 암호 모드를 보여주는 도면이다.
도 123은 OCB1 암호 인증 모드를 보여주는 도면이며, 빨간색 박스는 부채널 공격에 취약한 공격 지점을 나타낸다.
도 124는 OCB2 암호 인증 모드를 보여주는 도면이며, 빨간색 박스는 부채널 공격에 취약한 공격 지점을 나타낸다.
도 125는 OCB3 암호 인증 모드를 보여주는 도면이며, 빨간색 박스는 부채널 공격에 취약한 공격 지점을 나타낸다.
도 126은 CBC MAC을 보여주는 도면이다.
도 127은 부채널 공격에 강한 안전성을 제공하도록 변형된 CBC MAC를 보여주는 도면이다.
도 128은 OMAC을 보여주는 도면이다.
도 129는 PMAC을 보여주는 도면이다.
도 130은 키 Index 기반하여 ECB 모드를 어떻게 변형시킬 것인가를 보여주는 도면이다.
도 131은 CRI에 의해 개발된 부채널 공격에 강한 안전성을 제공하는 모드를 보여주는 도면이다.
아래에서는 도면들을 이용하여 본 발명의 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있을 정도로 본 발명의 내용을 명확하고 상세하게 기재할 것이다.
본 발명에서는 현 상황을 획기적으로 타개할 수 있는 신규 암호화 및 메시지 인증코드 (Message Authentication Code, MAC) 값 생성 논리 및 구현 방법을 제시한다. 해킹 및 다양한 공격 기술의 발달로 인하여, 암호 모듈에 기반한 암호 연산의 필요성이 대두됨에 따라 암호 모듈에 기반한 암호 연산 기법에 대한 연구가 중요시되고 있다. 암호 모듈은 암호 모듈 안에 비밀 키 값과 암호 알고리즘이 있어서 외부의 공격자로부터 안전하게 모듈 내에서 연산을 수행함으로 비밀 정보를 보호하고 비밀 정보를 안전하게 사용하여 원하는 연산을 안전하게 수행하는 데에 있다.
암호 모듈은 부채널 공격, 오류 주입 공격 등에 다양한 공격에 안전하도록 설계되어야 하기 때문에, 암호 모듈의 면적이 크면 클수록 설계 및 구현 비용이 증가하므로 암호 모듈 안에는 사용 가능한 메모리 크기에 제약이 따른다.
메시지 해싱이나 인증의 경우에는 일반적으로 작은 메모리만으로 구현할 수 있지만, 메시지를 암호화와 인증을 동시에 요구하는 암호인증의 경우에는 지금까지 제안된 대부분의 알고리즘들이 많은 메모리 사용을 필요로 한다. 구체적으로, 암호문의 크기가 증가할수록 요구되는 메모리 크기 또한 증가한다. 따라서, 기존의 대부분의 암호인증 기법은 메모리 사용이 제약된 암호 모듈에서는 빅 데이터에 대한 암호인증 구현이 불가능하다.
구체적으로, 암호인증 기법은 암호문에 대한 변경 또는 위조를 파악하기 위하여 태그를 먼저 검증한 후, 태그가 올바른 값이면 그 이후에 암호문을 복호화하여 평문을 출력하도록 되어 있다. 하지만, 현존하는 대부분의 암호 인증 기법은 태그 검증 및 평문 출력에 대해 메모리 사용량에 대한 언급을 하지 않고 있으며, 실제로 무엇보다 빅 데이터에 대해서 큰 메모리 사용을 요구한다.
본 발명에서는 저 메모리에 사용가능하도록 하는 암호 인증 방법을 제시한다.
일반적인 암호 시스템 설계 및 구현 논리
블록암호 DES가 NIST와 NSA에 의해 1977년 개발되고, ECB, CBC, OFB, CFB와 같이 블록암호를 이용하여 암호화를 수행하는 방식 (블록암호 운영모드라고 부름)이 1981년 미국의 NIST에 의해 FIPS 81로 발표되었다. 암호화 방식 이외에 메시지 인증코드를 생성 하는 방식에도 여러 가지가 있는데, 대표적인 MAC 생성 운영모드로 CBC-MAC, CMAC이 대표적이다. 그리고 암호화와 인증을 모두 제공하는 방식에는 CCM, GCM, OCB등이 있다. 하지만, 이들은 모두 부채널 공격을 고려하지 않고 단지 수학적인 안전성과 구현 효율성에만 근거하여 설계되어, 부채널 공격에 매우 취약하며, 대응 기법에 대한 비용 또한 매우 높아 현실적으로 효율성과 전력 소모에 민감한 구현 환경에서 사용되기에 어려움이 많은 상황이다.
이로 인해, 최근 암호학자들은 부채널 공격에 대한 대응 기법 비용을 줄이고 효율성 및 안전성을 늘리는 방식의 암호 설계 논리 연구를 진행하고 있는 중이다. 하지만, 대부분의 연구가 기존의 기법에 대해 아주 미미한 수준의 개선일 뿐, 근본적인 비용을 획기적으로 줄이는 방식이 아니라는 데에 한계를 갖고 있다. 좀 더 구체적으로 설명하면, 대부분의 현존하는 연구가 암호화 과정 동안 수행되는 연산 수를 줄이거나, 또는 덧셈이나 곱셈처럼 복잡한 연산 대신에 효율적인 부채널 대응 기법 적용을 가능케 하는 비트단위의 AND, OR, XOR, <<< 등과 같은 연산에 기반한 암호 시스템 개발에 초점을 맞추고 있다. 하지만, 연산 수를 줄이는 경우, 또 다른 안전성의 문제점을 낳게 되고, 비트 단위의 연산 과정에 기반한 설계 논리 역시, 연산 수가 늘어남에 따라 부채널 대응 기법 비용 또한 크게 증가한다는 점에 있어서 비용 절감 효과는 여전히 미비한 상태이다.
현존하는 부채널 공격 및 대응 기법 아이디어
부채널 공격은 Deterministic 암호 설계 기법에 강력한 공격 기법이다. 즉, 동일한 입력 값에 대해 동일한 출력 값을 갖는 경우, 내부 연산 과정에서 발생하는 부채널 정보, 즉 전력 소모량, 전자파 등을 이용하여 내부 비밀 상태 정보 또는 비밀 키 값 추출이 가능하게 된다. 이때, 부채널 정보는 내부 연산 과정 및 상태와 깊은 상관 관계를 갖는다. 따라서, 현존하는 대부분의 부채널 공격 대응 기법들은 내부 상태 정보를 랜덤하게 변형시킨다든가 또는 내부 상태를 노출되지 않도록 추가 연산을 도입하여 부채널 정보로부터 내부 상태 정보를 숨기는 데에 초점을 맞춘다. 이처럼, 부채널 공격에 대한 대응 기법 아이디어는 단순하지만, 현존의 대응 방식을 적용하기에는 비용 측면에서 비현실적인 상황이다.
스마트폰 등 스마트 디바이스에 대한 부채널 취약점 공격에 대한 확대가 예상되며, 부채널 공격 기술은 점차 준전문가 저비용 공격 기술로의 변화로 말미암아, 고등 부채널 대응 기법에 대한 요구가 증가하고 있다고 말하고 있다. 하지만, 고등 부채널 대응을 위해 기존의 대응 기법을 적용할 경우 심하게는 300배에서 500배의 성능 저하가 있어서 실제로 사용이 불가능한 상황이며, 따라서 성능 저하를 고도화할 수 있는 신규 부채널 방지를 위한 원천 기술의 확보가 필요함을 알 수 있다.
교통 카드처럼 인증 및 지불 용도로 사용할 경우, 주고 받는 데이터 양이 적기 때문에, 성능 저하의 체감도가 낮을 수 있으나, 스마트 디바이스로 디바이스 내의 데이터를 암호화하거나, 또는 암호화 통신 등을 요구할 경우 너무나 큰 비용이 요구되어 실제 구현이 불가능하다. 무엇보다, 배터리에 기반하여 에너지 소비에 매우 민감한 스마트 디바이스의 경우, 현존하는 부채널 대응 기법 적용에 따른 상당한 에너지 손실에 의해 실용성 및 가용성 측면에서 큰 타격을 입게 된다.
위처럼 300배에서 500 배의 성능 저하를 가져오는 근본 이유에는 암호, 복호화 및 인증 등을 위한 설계 기법의 암호학적 복잡성에 기인한다. 좀 더 구체적으로 설명하면, 첫째, 현존하는 모든 설계 기법들은 부채널 대응을 위하여 암호, 복호화 및 인증의 기반이 되는 블록암호, 치환 함수, 압축 함수 등에 부채널 대응 기법을 반드시 적용해야 한다. 둘째, 기반이 되는 기반 함수들이 암호학적 안전성을 위하여 복잡하게 설계되어, 기반함수의 복잡성으로 말미암아 효율적인 대응 기법의 적용이 어렵게 된 것이다.
이러한 두 가지 이유로 인해, 현존하는 암호 및 인증 등의 설계 방식으로는 효율적인 부채널 대응 기술의 확보가 매우 어려운 상황이다. 이처럼 부채널 대응 기법에 효율적인 암호 및 인증 기법을 개발하기 위하여, 위의 두 가지 문제점 중 하나만이라도 극복해야 하는데, 문제는 현존하는 모든 암호, 복호화, 인증 등의 모든 설계 기법들은 기반 함수가 반드시 부채널 공격에 안전해야 한다는 가정을 두고 있다는 것이고, 둘째로 기반이 되는 함수를 단순화시켜 부채널 대응 기법 비용을 낮추고자 할 경우 기반 함수의 단순성으로 인한 암호학적 안전성에 문제가 발생할 수 있으므로 기반 함수를 단순화시키는 것도 어려운 상황이다.
부채널 공격의 핵심은 deterministic 또는 랜덤하지 않은 연산 과정을 수행하는 과정에서 비밀 정보를 부채널 정보로부터 축출하는 데에 있다. 따라서 매번 비밀 키가 랜덤하게 바뀌든지 또는 비밀 난스(Nonce) 값이 매번 랜덤 하게 바뀌든지 해야 적은 연산으로 부채널 공격에 안전한 대응기법 마련이 가능하다. 보통 난스는 공개가 되는 값이나, 본 발명에서는 난스가 비밀 값의 일부인 경우로 고려한다. 만약, 키와 난스가 둘 다 고정되거나 추측이 가능하게 되면, 전체 연산과정의 보호 없이는 부채널 공격에 의해 키 추출이 가능하게 된다.
대표적인 블록 암호 국제 표준으로 AES가 있다. 우리나라에서 개발한 국제 표준 블록 암호 알고리즘으로는 SEED, ARIA, HIGHT 가 있다. 본 발명에서는, 통신 환경에 적합한, 임의의 국제 표준 블록 암호 알고리즘으로 구현해도 상관이 없는 암호화 및 인증 코드 값을 생성하도록 돕는 암호시스템 설계 방식을 제안한다. 또한, 치환 함수와 압축 함수에 기반한 방식 또한 제안한다.
암호 통신에서 난스 값이 반복되어 사용될 경우, 전체 연산 과정이 deterministic이기 때문에, 부채널 공격에 의해 비밀 키가 노출될 위험이 있다. 따라서, 난스 값은 재 사용이 안되도록 하는 조치가 요구된다. 특히, 복호화 시 난스 재사용을 막아야 한다. 또한, 난스가 노출될 경우, 키가 노출될 위험 또한 높게 되어 난스 자체도 암호화를 통해 보호를 해야 한다. 또한, 메모리가 작은 환경 내에서도 동작할 수 있는 암호 인증 기법이 요구된다.
본 발명에서는 부채널 공격 대응이 효과적으로 가능할 뿐만 아니라 이는 현존하는 대부분의 알려진 모든 기술들과 달리, 메모리 크기가 작은 암호 모듈에서 암호인증 기능을 효율적으로 수행할 수 있다. 구체적으로, 암호문에 대한 위조 또는 변조를 파악하기 위해 태그 값을 검사하는 데, 이때 작은 메모리 사용으로 효율적으로 구현할 수 있는 설계 논리를 제시한다.
본 발명에서 고려하는 구현 환경 모델은 도 1에서 보여주는 것처럼 암호 모듈을 장착한 두 시스템 사이의 통신 환경에 초점을 맞춘다. 암호화 및 인증 코드 값 생성은 암호 모듈이 담당하며, 각 암호 모듈은 자신을 구동하는 시스템조차도 신뢰하지 않는다. 하나의 암호 모듈을 A라고 하고 다른 또 하나의 암호 모듈을 B라고 하자. 본 문서는 어떻게 두 암호 모듈이 안전하게 통신하기 위한 논리 및 구현 방법을 제시한다.
도 2는 부채널 공격 방지 기법이 적용된 일반적인 암호 시스템을 보여주는 도면이다. 도 2에서 보는 바와 같이 일반적인 암호 시스템들은 상기 암호 시스템의 안전성을 위하여 기반 암호 함수를 반드시 부채널 방지 기법에 의해 보호해야만 한다. 또한 기반 암호 함수의 사용 횟수에 따라 부채널 방지 기법에 의한 시간 및 에너지 비용 또한 따라서 함께 증가하게 된다.
도 3은 본 발명의 실시 예에 따른 신규 암호 시스템에 대한 부채널 공격 방지를 개념적으로 설명하는 도면이다. 도 2에서 설명한 일반적인 암호 시스템과는 달리 도 3에서 제시된 본 발명 원리는 기반 암호 함수 대신 외부 연산을 보호하는 데에 초점을 맞춘다.
외부 연산을 보호하는 목적은 크게 두 가지로 나뉜다. 첫째, 외부 연산을 수행하는 과정 중에 사용되는 비밀 정보를 보호하는 것과, 둘째, 외부 연산을 보호함으로써 기반 암호 함수의 입출력 정보를 보호하는 데에 있다. 상기 외부 연산이 기반 암호 함수에 비해 단순하고, 효율적인 경우라면 부채널 방지 기법 비용 측면에서 보았을 때, 도 2에 비해 도 3이 비용 및 효율성 측면에서 매우 큰 장점을 갖게 된다. 그 이유는 부채널 방지 연산을 수행 시 연산량이 크고 연산 과정이 복잡할수록 부채널 방지 기법 비용이 매우 빠르게 증가하기 때문이다. 기반 암호 함수는 큰 연산량으로 복잡하게 설계되어야 하는 반면, 기반 암호 함수 밖의 외부 연산 과정의 경우 매우 단순하면서도 효율적으로 수행할 수 있기 때문이다.
도 3의 방식에서는 기반 암호 함수 대신 외부의 단순한 연산에 대한 보호만 요구되기 때문에 부채널 방지 기법이 적용된다고 할지라도 저비용으로 고 효율성, 고 안전성을 갖도록 암호, 복호화, 인증 기법을 구현할 수 있음을 보여준다.
본 발명에서는 본 발명의 설계 사상을 설명하기 위하여, 구체적으로 블록암호기반, 치환함수 기반, 압축 함수 기반 암호화 및 인증 기법을 제안한다. 크게 세단계로 나누어진다. 첫째 단계에서는 두 모듈 간에 공유된 키로부터 임시 비밀 값을 생성하고 이를 다루는 방식이고, 둘째 단계에서는 임시 비밀 값들의 반복 사용 여부를 체크하고, 임시 비밀 값을 보호하기 위하여 암호화 또는 해싱한다. 아니면, 임시 비밀 값 자체를 암호 모듈 안에서만 간직하는 경우를 생각할 수 있다. 셋째 단계에서는 임시 비밀 값을 이용하여 암호화 키 값을 보호하거나, 일회용 암호화 키를 생성하여 암호화 또는 복호화 및 인증 코드를 안전하게 생성하는 단계이다. 세번째 단계에서 암호화 또는 해싱된 임시 비밀 값이 반복되었는지 확인하는 작업이 들어가고, 반복 사용될 경우, 복호화를 중지한다.
임시 비밀 값을 보호하기 위해 암호화 방식 또는 해싱을 하는 방식을 구체적으로 소개하면 다음과 같다. 첫째로, 암호화 방식에서는 두 모듈 사이에 공유된 고정된 비밀 키를 이용하여 임시 비밀 값을 암호화하거나 복호화할 수 있다. 이때, 부채널 공격으로부터 보호해야 할 연산 수를 최소화해야 한다. 구체적으로 본 발명에서는 한 번의 XOR 연산의 보호만으로 충분함을 보인다. 이처럼 얻어진 임시 비밀 값이 사용해도 되는 경우라면, 암호화 및 인증을 수행하는 데 사용되게 된다.
둘째로, 해싱을 이용한 방식에서는 두 모듈 각각이 임시 비밀 값과 그의 해쉬 값을 저장해 놓는 경우이다. 즉, 해쉬 값으로부터 해당 임시 비밀 값을 얻을 수가 있게 된다. 그리고, 임시 비밀 값이 사용 가능한 임시 비밀 값일 경우, 그 임시 비밀 값을 이용하여 암호화 및 인증을 수행하게 된다. 이 경우에는 부채널 대응 기법이 요구되지 않는다. 만약, 모듈이 해쉬 값을 저장해 놓지 않고 사용될 임시 비밀 값을 미리 알고 있는 경우라면, 두 암호 모듈 사이에 사용하기로 미리 약속되어진 임시 비밀 값을 이용하여 해쉬 값을 생성한 후, 해쉬 값이 맞는지를 체크한다. 만약, 해쉬 값이 틀리면, 암복호화 및 인증을 수행하지 않는다.
임시 비밀 값 자체를 암호 모듈 내에 간직하고 있는 경우에는 두 암호 모듈은 통신 시 임시 비밀 값의 암호문 또는 해쉬 값 조차도 보내지 않게 된다. 이 경우, 두 암호 모듈은 암복호화 및 인증을 올바르게 하기 위해서는, 임시 비밀 값 자체에 대한 동기화를 어떻게 할 것인가와 사용된 임시 비밀 값을 검증할 수 있는 기법이 요구된다.
이 경우, 두 가지를 살펴볼 수 있다. 하나는, 메시지의 일부를 고정된 상수 값으로 하여, 복호화 시 미리 약속된 고정 상수 값이 나오지 않을 경우, 잘못된 임시 비밀 값임을 알 수 있다. 다른 하나는, 인증 코드 값을 통해서, 인증 코드 값이 일치하지 않으면 임시 비밀 값이 잘못 사용된 경우임을 알 수 있다.
본 발명의 특징은 임시 비밀 값 (예를 들어, 비밀 난스 값) 을 부채널 공격으로 부터 안전하면서도 효율적으로 보호하는 데에 있다. 그리고, 상기 임시 비밀 값을 이용하여 부채널 대응 기법 적용 없이도 암호화 및 인증을 수행한다. 블록 암호 기반의 경우, 상기 임시 비밀 값을 이용하여 암호화 키를 보호하기 위한 마스크 값을 생성할 수 있다. 또는 상기 임시 비밀 값을 이용하여 일회용 암호화 키를 생성하여 암호화 및 인증을 수행할 수도 있다. 특히, 치환 함수 기반 또는 압축 함수 기반에서 보이는 바와 같이, 상기 임시 비밀 값은 암호화 상태 값을 예측하기 어렵도록 만들어 부채널 공격이 어렵도록 하는 데에 쓰일 수 있다.
또한, 본 발명에서는 메모리가 제약된 환경에서 안전하게 암호화 및 인증을 수행하는 방식을 제안한다.
본 발명에 따른 블록 암호 기반 신규 설계 논리 아이디어
현존하는 암호화 및 인증 코드 값 생성 방식들은 기반이 되는 알고리즘이 부채널 공격에 안전하게 구현되어야 한다는 근본적인 문제점을 지니고 있다. 이러한 근본적인 문제점을 안고 가는 이상, 부채널 공격에 대해 저비용, 고효율, 고 안전성을 인갖는 구현 방법은 사실상 없는 상황이다. 따라서, 본 발명에서는 관점을 바꾸어, 운영 모드 차원에서 접근하고자 한다. 어떻게 하면, 기반 알고리즘에 대한 부채널 대응 기법 적용 없이 운영 모드 차원에서의 대응만으로 안전성을 제공할 수 있는가에 대한 것이다. 본 발명에서는, 운영모드 차원에서, 부채널 공격에 대해 저비용, 고 효율성, 고 안전성을 제공하는 암호화 및 인증 코드 값 생성하는 설계 논리 및 구현 방식을 제안한다.
부채널 공격의 핵심은 deterministic 또는 랜덤하지 않은 연산 과정을 수행하는 과정에서 비밀 정보를 부채널 정보로부터 축출하는 데에 있다. 따라서 매번 비밀 키가 랜덤하게 바뀌든지 또는 비밀 난스 (Nonce) 값이 매번 랜덤 하게 바뀌든지 해야 적은 연산으로 부채널 공격에 안전한 대응기법 마련이 가능하다. 보통 난스는 공개가 되는 값이나, 본 발명에서는 난스가 비밀 값의 일부인 경우로 고려한다. 만약, 키와 난스가 둘 다 고정되거나 추측이 가능하게 되면, 전체 연산과정의 보호 없이는 부채널 공격에 의해 키 추출이 가능하게 된다.
대표적인 블록 암호 국제 표준으로 AES가 있다. 우리나라에서 개발한 국제 표준 블록 암호 알고리즘으로는 SEED, ARIA, HIGHT 가 있다. 본 발명에서는, 통신 환경에 적합한, 임의의 국제 표준 블록 암호 알고리즘으로 구현해도 상관이 없는 암호화 및 MAC 값을 생성하도록 돕는 암호시스템 설계 방식을 제안한다.
암호 통신에서 난스 값이 반복되어 사용될 경우, 전체 연산 과정이 deterministic이기 때문에, 부채널 공격에 의해 비밀 키가 노출될 위험이 있다. 따라서, 난스 값은 재 사용이 안되도록 하는 조치가 요구된다. 특히, 복호화시 난스 재사용을 막아야 한다. 또한, 난스가 노출될 경우, 키가 노출될 위험 또한 높게 되어 난스 자체도 암호화를 통해 보호를 해야 한다. 난스 재 사용에 대한 위험은 복호화 과정에서 나타난다. 공격자가 암호문을 위조할 경우 인증 코드 값이 다르게 되어, 인증 코드가 틀리게 나온 난스를 블랙리스트에 올려서 다시는 사용하지 못하도록 하는 것이다. 만약, 블랙 리스트의 크기가 매우 크게 되면, 다시 새롭게 키를 공유하고, 블랙 리스트들을 삭제한다. 이러한 블랙리스트 기반 방식 외에 여기서는 다른 방식들을 또한 소개한다. 난스 열 생성 방식, 마스크 열 생성 방식, 암호화 및 인증 방식과 같이 세 부분으로 나누어 설명하고자 한다.
블록 암호 기반 난스 열 생성 방식
다행스럽게도 통신 환경에서의 암호화는 저장 데이터의 암호화가 아닌, 통신 자체의 암호화에 초점을 두고 있기 때문에, 난스 재사용을 막는 방법이 쉽게 구현될 수 있다. 두 암호 모듈 A와 B는 공유된 비밀 키 K로 부터난스 열 N1, N2, N3, …를 생성하여 공유하게 된다. 난스 열을 다루는 방식에는 두 가지로 나누어 살펴볼 수 있는데, 첫째로, 난스 열을 암호 모듈 내에 저장해 놓는 방법이고, 둘째는 난스 열을 실시간으로 생성하는 방법이다.
먼저 난스 열을 암호 모듈 내에 저장해 놓는 방법을 설명하면, 암호문 복호화 시 얻어진 난스 값이 테이블에 존재할 경우 올바른 난스 값으로 받아들이고 복호화를 진행한다. 그리고 한번 사용된 난스는 삭제하여 난스 재사용을 막는다. 만약 올바른 난스 값이 아니면 복호화 중지하여 부채널 공격을 무력화시킨다. 두 번 째, 난스 열을 실시간으로 생성하는 방법을 설명하면, 암호문 복호화시 얻어진 난스 값이 사용되기로 예정된 난스 값이면 받아들이고 복호화를 진행하며, 아니면 복호화를 중지한다.
예를 들어, 다음의 도 4와 같이 공유된 비밀 키 K로부터 난스 열 N1, N2, N3, …를 생성한다. 공유 키로부터 난스 열을 생성하였기에 두 암호 모듈 A와 B는 난스 열 또한 공유하게 된다. 여기서 보인 예는 한가지 예에 불과하며, 여기서의 핵심은 키를 통해 난스 열을 생성한다는 것이며, 키 K는 초기에만 사용되고 그 이후에는 사용되지 않으며, feedforward 연산 과정으로 인해 역 연산이 어렵도록 하였다.
공유 키를 이용하여 새로운 메시지를 암호화할 경우, 난스 사용은 N1부터 순차적으로 사용하며, 만약 복호화 시 사용되어야 할 난스가 사용되지 않을 경우, 암호 모듈은 복호화를 수행하지 않는다. 실제 난스 열을 생성하는 것은 처음 비밀 키 K가 공유된 시점에서 난스 열을 생성하여 암호 모듈 내에 저장하는 방식을 취하거나, 아니면, 실시간으로 매번 이전 난스로부터 다음에 사용될 난스를 생성하여 사용할 수도 있다.
위의 난스 열 생성 알고리즘을 보면, 공유 비밀 키 K는 처음에 한번만 사용되고, const는 유일한 공개된 상수 값이며, 매번 비밀 난스 값이 업데이트되어 사용되기에, 어떤 상태에서도 동일한 비밀 정보가 반복적으로 사용되지 않아 부채널 공격 적용이 어렵게 설계되어 있음을 알 수 있다.
특히, 난수 열을 생성 시, 단순한 연산 대신 복잡한 블록 암호 연산을 사용하는 이유는, 잘 설계가 된 블록 암호를 사용할 경우, 각 난스 값 생성 시 좋은 난수 성질 또한 갖게 되기 때문이다. 좋은 난수성을 갖는 난스의 사용은 부채널 공격을 대응하는 데에 매우 필수적이다.
블록 암호 기반 마스크 열 생성 방식
여기서 우리가 제안하는 암호화 방식을 설명하기 위해 마스크 열 생성에 대해 언급하고자 한다. 마스크 값들은 후에 암호화를 진행할 때 사용되는 공유 비밀 키의 정보를 부채널 공격으로부터 보호하는 데에 있다. 구체적으로, 도 5에서와 같이, 공유 키가 사용된 블록 암호의 입 출력 정보를 랜덤하게 하기 위한 마스크 열 Z1, Z2,... 생성한다. 여기서 마스크 열을 생성하기 위하여 난스 열로부터 현재 사용되는 난스를 이용하는데, 이때의 난스를 N으로 표현한다. const1은 난스 열 생성에 사용되는 const와 다른 상수이다.
마스크 열을 블록 암호를 이용한 이유도 부채널 공격에 강한 안전성을 제공하기 위하여 블록 암호 입출력 정보에 공격자로 하여금 예측할 수 없도록 좋은 난수성이 요구되기 때문이다. 매번 랜덤한 마스크 값을 사용함으로, 공격자로 하여금 암호화 과정 동안 블록 암호의 입출력 정보를 철저히 숨김으로, 부채널 공격자로 하여금 블록 암호에 사용된 비밀 키 값을 보호할 수 있게 된다.
일곱 가지 블록 암호 기반 암호화 및 인증 방식
위에서 설명한 방식으로 난스와 마스크 열이 주어졌을 경우, 먼저 처음 세 가지 암호화 및 인증 방식을 소개한다. 구성 방법은 OCB 모드와 유사한 점이 있으나, OCB 모드는 부채널 공격에 대한 안전성을 고려하지 않고 설계된 암호 인증 방법인 반면, 본 발명에서 제안하는 방식은 부채널 공격까지 고려했을 때에 저비용, 고효율, 고안전성으로 통신 환경에서 구현될 수 있는 암호화 및 인증코드를 생성하는 방식이라는 특징을 지닌다. 네 번째부터 일곱 번째 방식은 ECB 모드와 유사하며 블록 암호에 사용되는 키 값을 난스를 이용하여 매 블록 마다 다르게 생성한다는 특징을 지닌다. 즉, 난스를 이용하여 블록 암호에 사용되는 일회용 암호화 키를 생성하여 사용하는 경우이다. 여기서 ECB 모드는 하나의 예로써 다른 모드들에 대한 비슷한 방식의 응용이 가능하다.
블록 암호 기반 암호화 및 인증방식 1
임의의 길이의 메시지 M이 주어졌을 때, M을 블록 암호의 블록 크기 단위로 쪼개어 이를 M=M1||M2||...||Mt 와 같이 표기한다. 이때, 마지막Mt의 크기는 1에서 블록 크기 사이의 임의의 값을 취할 수 있다. 그러면, 도 6과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다. K는 두 암호 모듈 사이에 공유된 키, const2는 이전에 사용된const, const1과는 다른 상수이며, 그리고 Checksum=M1 xor M2 xor...xor (Mt||0*) 으로 정의된다.
블록 암호 기반 암호화 및 인증 방식 1을 설명하면, 암호문의 일부인 C0는 난스 N의 암호문이라고 보면 된다. 난스 N을 보호하기 위하여 암호화된 C0가 상대방 암호 모듈에 안전하지 않은 통신 채널을 통해 전달된다. 암호문을 전달받는 암호 모듈은 암호문을 복호화하기 위하여, 먼저 주어진 암호문의 첫 번째 블록인 C0로부터 N을 생성하고, N이 앞서 설명한 난스 생성 알고리즘의 요구 조건에 부합할 경우 N으로부터 마스크 열을 생성하면서 동시에 복호화 과정을 수행하여 M을 얻어내고, 최종적으로 인증 코드 값 T이 맞는 경우, M을 올바른 메시지로 받아들이고, 틀리면 메시지에 변조가 있음을 알고, 오류 값을 출력한다.
도 7은 부채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 1에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 암호화 및 인증 방식 2
첫 번째 방식과 다른 점은 Checksum 생성하는 방법에 있다. 임의의 길이의 메시지 M이 주어졌을 때, M을 블록 암호의 블록 크기 단위로 쪼개어 이를 M=M1||M2||...||Mt 와 같이 표기한다. 이때, 마지막Mt의 크기는 1에서 블록 크기 사이의 임의의 값을 취할 수 있다. 그러면, 도 8과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다. K는 두 암호 모듈 사이에 공유된 키, const3는 이전에 사용된const, const1, const2와는 다른 상수이며, Checksum=a1 xor a2 xor...xor at xor (Mt||0*) 으로 정의된다.
도 9는 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 2에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 암호화 및 인증 방식 3
두 번째 방식과 다른 점은 Checksum 생성하는 방법과 마지막 메시지 블록 처리에 있다. 임의의 길이의 메시지 M이 주어졌을 때, 10* 패딩을 이용하여 M||10*=M1||M2||...||Mt 와 같이 표기한다. 그러면, 도 10과 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다. K는 두 암호 모듈 사이에 공유된 키, const3는 이전에 사용된const, const1, const2와는 다른 상수이며, Checksum=a1xor a2 xor...xor at 으로 정의된다.
도 11은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 3에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 암호화 및 인증 방식 4
도 12는 방식 4를 보여 준다. 앞의 두 방식과 다른 점은 마스크 값을 이용하지 않는다는 특징이 있다. 임의의 길이의 메시지 M이 주어졌을 때, M을 블록 암호의 블록 크기 단위로 쪼개어 이를 M=M1||M2||...||Mt 와 같이 표기한다. 이때, 마지막 Mt의 크기는 1에서 블록 크기 사이의 임의의 값을 취할 수 있다. 그러면, 다음 그림과 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다. Checksum=M1 xor M2 xor...xor (Mt||0*) 으로 정의된다.
도 13은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 4에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 암호화 및 인증 방식 5
도 14는 방식 5를 보여 준다. 방식 4과 차이점은 마지막 Checksum를 생성할 때 처음 사용된 난스 N을 다시 사용한다는 특징을 지닌다. 임의의 길이의 메시지 M이 주어졌을 때, M을 블록 암호의 블록 크기 단위로 쪼개어 이를 M=M1||M2||...||Mt 와 같이 표기한다. 이때, 마지막 Mt의 크기는 1에서 블록 크기 사이의 임의의 값을 취할 수 있다. 그러면, 다음 그림과 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
도 15는 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 5에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 암호화 및 인증 방식 6
도 16은 방식 6을 보여 준다. 도 16을 보면, 방식 5와의 차이점은 매번 블록 암호 연산 앞에 마스크 값을 블록 암호의 키 부분에 적용된 값을 이용하여 생성한다는 특징이 있다. 이러한 방식은 앞에서의 마스크 열이 적용 안 된 경우들에 유사하게 적용이 가능하다. 그리고 Checksum을 평문 자체로부터가 아닌, 평문과 마스크 값을 XOR한 이후의 값들을 이용하여 Checksum를 생성한다는 특징이 있다. Checksum=a1 xor a2 xor...xor at xor (Mt||0*) 으로 정의된다. 임의의 길이의 메시지 M이 주어졌을 때, M을 블록 암호의 블록 크기 단위로 쪼개어 이를 M=M1||M2||...||Mt 와 같이 표기한다. 이때, 마지막 Mt의 크기는 1에서 블록 크기 사이의 임의의 값을 취할 수 있다. 그러면, 다음 그림과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다.
도 17은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 6에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 암호화 및 인증 방식 7. 도 18는 방식 7을 보여 준다. Checksum=a1 xor a2 xor...xor at 으로 정의된다. 이를 위해, 임의의 길이의 메시지 M이 주어졌을 때, 10* 패딩을 이용하여 M=M1||M2||...||Mt 와 같이 표기한다. 그러면, 다음 그림과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다.
도 19는 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 7에서 보호되어야 할 연산을 보여준다.
블록 암호 기반 안전성 강화 옵션
앞에서 보인 일곱 가지 방식에서 보호되어야 할 연산이 부채널 공격에 의해 안전하게 보호될 경우 안전하다고 말할 수 있으나, 만에 하나, 먼 훗날 신규 부 채널 공격 기술의 발전으로 대응 기법의 취약성으로 임의의 상태의 암호화 키 값 또는 난스 값 또는 마스크 값이 노출되더라도 과거와 미래의 통신 정보를 보호하기 위하여, 이제부터 비밀 공유 키 K로부터 암호화 키 열 생성 알고리즘, 난스 열 생성 알고리즘을 제시한다. 마스크 열 생성 알고리즘 역시 비슷하게 정의될 수 있으나, 실시간 통신의 효율성과 직결되어, 통신의 효율성을 떨어뜨리기에 여기서는 생략하나, 이 역시 가능함을 명시해 둔다.
블록 암호 기반 안전성 강화를 위한 암호화 키 열 생성 방식
현재에 사용된 암호화 키가 노출된다고 할지라도, 과거와 이전에 사용된 키를 보호하기 위하여 다음 그림과 같이 매번 암호화에 대해 다르게 사용될 일회용 암호화 키 열K1, K2,... 생성한다. 각 일회용 암호화 키는 암호화 시 난스와 동일하게 한 번의 암호화 당 한번 씩 만 사용되고, 다음 번의 암호화 시 암호화 키 열에서의 다음 번의 일회용 암호화 키를 이용한다.
앞에서 설명한 방식과의 차이는, 공격자가 임의 상태의 암호화 키 Ki 또는 난스 값 Ni를 알았다고 할지라도, 다른 암호화 키 값들 또는 난스 값들을 보호할 수 있다는 장점을 가진다.
도 20에서 보인 예를 보면, 각 암호화 키를 생성하기 위하여, 블록 크기를 네 번 얻어서 각 암호화 키를 정의함을 알 수 있다. 따라서, K1을 공격자가 얻었다고 할지라도, K2를 얻기 위해서는 키 열 생성 알고리즘의 내부 전체 블록 상태를 알아야 하는데, 블록 정보씩만 공격자에게 주어지기에, K2를 얻기 위하여 공격자는 블록 크기에 대해 전수 조사를 해야 하고, 또한 추측한 키가 맞는지에 대해 통신을 통해 검증해야 하는 부가적인 오버헤드가 요구되기에 과거와 미래에 사용될 암호화 키를 보호할 수 있다는 장점을 가진다. 무엇보다, 공유 키 K가 주기적으로 업데이트가 될 경우, 어떤 시점에 사용된 공유 비밀 키에 대응되는 암호화 키 열을 설사 모두 알았다고 할지라도, 과거 혹은 새로 갱신된 공유된 비밀 키 정보를 얻는 데에는 전혀 도움이 되지 않는다.
블록 암호 기반 안전성 강화 위한 난스 열 생성 방식
도 21에서 보여주는 것처럼, 난스 열 생성 방식 또한 비슷하게 정의될 수 있다.
블록 암호 기반 헤드 정보 등 부가 정보의 인증까지 처리하고자 할 경우
앞에서는 난스와 메시지에 대한 암호문, 그리고 이에 대한 인증 코드 값만이 존재했는데, 때론 헤드 정보 등 공개된 정보와 함께 인증을 처리할 경우가 있다. 헤드 등과 같이 부가적인 정보를 처리하는 암호화 및 인증 방식을 AEAD (Authenticated Encryption with Associate Data) 라고 부른다. 이제부터 부가 정보를 인증할 수 있도록 앞서 제시된 방식들을 어떻게 수정할 것인가에 대해 설명하고자 한다.
부가정보를 A라고 할 때, 먼저 A에 패딩을 하여 패딩 후 A의 크기가 블록 크기의 배수가 되도록 한다. 구체적으로, 패딩 방법을 pad라고 할 때, pad(A)=A1||...||Aj 처럼 패딩 후의 크기가 j 블록으로 표현된다고 하자. 예를 들어, 패딩 방법으로 10* 패딩 방법을 쓸 수 있다.
그러면 먼저 방식 1을 도 22와 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor M1 xor M2 xor ...xor (Mt||0*) 으로 정의하여 도 22와 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다.
방식 2를 도 23과 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor a1 xor...xor at xor (Mt||0*) 으로 정의하여 도 23과 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
방식 3을 도 24과 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor a1 xor...xor at으로 정의하여 도 24와 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
방식 4를 도 25와 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor M1 xor M2 xor ...xor (Mt||0*) 으로 정의하여 도 25와 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
방식 5를 도 26과 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor M1 xor M2 xor... xor (Mt||0*) 으로 정의하여 도 26과 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다. 이때 한가지 예로 부가정보를 처리할 때와 평문을 암호화할 때에 사용된 상수 값을 다르게 했는데, 부가 정보와 암호문 처리 방식을 구별되게 하게 하는 방법에는 여러 가지가 있다. 가령, 부가 정보 및 메시지 패딩 방법에 변화를 주는 방법도 생각할 수 있다.
방식 6을 도 27과 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor a1 xor...xor at xor (Mt||0*) 으로 정의하여 도 27과 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
방식 7을 도 28과 같이 변형시킬 수 있다. 그리고 Checksum= α1 xor...xor αj xor a1 xor...xor at으로 정의하여 도 28과 같이 동작하여, 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
블록 암호 기반에서 암호문 없이 인증 코드만 생성하고자 하는 경우
상황에 따라서 암호화 없이 인증 코드만 요구되는 경우 부채널 공격에 안전하도록 인증 코드 값인 MAC 값을 생성하고자 경우, 앞서 제시된 모든 방식들을 인증 코드만 생성하는 MAC 알고리즘으로 변경이 가능하다. 구체적으로, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T 중 C1||...||Ct을 생략한 채, C0||T 값 전체를 인증 코드로 정의를 내린다.
블록 암호 기반에서 인증 코드 없이 암호문만 생성하고자 하는 경우
상황에 따라서 인증 코드에 대한 필요 없이 암호화만 요구되는 경우 부채널 공격에 안전하도록 암호화를 수행하고자 하는 경우, 앞서 제시된 방식들의 출력 값 중 τ-비트 값인 인증 코드 T을 제외한 나머지 암호문 C(=C0||C1||...||Ct)만을 출력함으로 암호문을 생성할 수 있다.
블록 암호 기반에서 보호해야 할 연산의 수를 제로(0)로 만드는 방법
본 발명에서 제시한 방법에서 보호해야 할 연산이 XOR 연산 한 개임을 보였다. 본 절에서는 부채널 공격에 대해 전혀 대응 방법을 적용하지 않고서도 안전하도록 하는 방법을 제안한다. 즉, 보호해야 할 연산의 수를 0으로 줄이는 방법이다. 구체적으로, 난스로부터 C0 값을 생성하는 방식에 변화를 준다. 우선 도 29을 보면, 지금까지 보인 난스를 다루는 방식을 보여준다. 도 29를 보면, 난스 값을 보호하기 위하여 C0 값을 생성하는 것을 볼 수 있다.
난스 값이 XOR되는 부분을 보호한다고 하더라도, 동일한 상수 값과 동일 한 비밀 키 값을 가지고 반복적으로 수행할 경우, template attack과 같은 공격자에게 사용된 키 값이 노출될 수 있다. 이를 막기 위하여, 매번 동일한 상수값을 동일한 키 값으로 암호 연산을 수행하는 대신, 난스 값과 XOR되는 값을 미리 저장해 놓고 필요할 때마다 난스 값과 XOR 하여 사용한다. 이때, XOR 연산은 보호해야 한다.
도 29에서 사용된 암호화 키 K 값을 보호하기 위하여 XOR 연산을 부채널 공격에 안전하도록 대응 방법을 적용해야 한다. 도 29에서는 암호화 키 K를 알고 있는 C0로부터 N를 복호화 해서 사용 가능한 난스 N인지를 판별할 수 있게 된다.
이번에는 부채널 대응 방법 적용 없이 안전하게 난스 값을 보호하는 방법을 제시한다. 도 30에서 보여주는 것처럼, 바로 일방향 함수 f를 이용하여 난스 값 N을 해쉬하여 보호하는 방식이다. 해쉬 값으로부터 난스 값을 계산하는 것이 어려워야 한다. 두 암호 모듈은 난스 값과 이에 대한 해쉬 값을 미리 알고 있다면, 해쉬 값을 보고서, 대응되는 난스 값을 찾을 수 있다. 즉, 난스 열과 C0 열을 암호 모듈 안에서 동시에 생성하여, C0 값으로부터 해당되는 난스 값을 바로 알 수 있게 할 수 있다. 그리고 그 난스 값이 사용해도 되는 난스인지를 판별한 다음 암호화 및 인증을 진행하게 된다.
또는 난스 열을 알고 있는 암호 모듈이 사용될 난스를 이미 알고 있다면, 해당 난스 값을 직접 입력하여 C0 값이 나오는가를 보고, 올바른 난스를 사용했는지 확인이 가능하며, 올바른 난스가 사용된 경우 난스를 이용하여 복호화를 진행한다. 만약, 잘못된 난스라면 복호화를 더 이상 진행하지 않고 중지한다.
구체적으로 f 를 블록 암호 E를 이용하여 도 31와 같이 구현할 수 있다. 도 31를 보면, 록 암호 E에서 Nonce는 블록 암호의 키로 사용되고, 입력 값은 constant가 됨을 알 수 있다.
블록 암호 기반에서 난스에 대한 동기화 과정 없는 암호화 및 인증 방식
지금까지 소개된 방식들은 두 암호 모듈 사이에 복호화가 제대로 이루어지기 위해서는 난스가 동기화 되어야 한다는 요구 조건을 필요로 하였다. 만약, 난스에 대한 동기화가 어려운 경우, 난스 열을 동기화하지 않고, 두 암호 모듈은 서로 다른 난스 열을 생성하고, 다만, 복호화 시 인증 코드가 맞지 않은 경우에 각 암호 모듈은 사용된 난스 값을 자신의 모듈 내의 테이블에 저장한다.
두 암호 모듈 사이에 테이블을 공유할 필요는 없다. 왜냐하면, 공격자가 이전에 사용된 C0에 대해 암호문 또는 인증 코드에 변조를 가할 경우, 복호화 시 인증 코드가 불일치하게 되어 공격 목적으로 반복 사용된 C0 값에 대한 검증이 가능하게 된다. 또한 공격자가 공격에 이용할 수 있는 동일 C0가 사용된 암호화 및 복호화 과정은 최대 4 번이다. 이는 각 모듈에 동일한 C0 값이 최대 2번씩 적용될 수 있기 때문이다. 하지만, 동일 C0가 사용된 4번의 부채널 정보를 이용하여 공격자가 공격하는 것이 현실적으로 어렵기 때문에, 이는 안전성 위협의 고려 대상이 아니다.
블록 암호 기반에서 복호화해야 할 암호문의 크기가 큰 경우(즉, 암호 모듈 내의 메모리 크기가 제한적인 경우)
암호문에 대한 변조가 없음이 파악되기 전까지는 암호모듈 밖으로 복호화된 정보, 즉 평문 값의 일부라도 암호 모듈 밖으로 새나가서는 안 된다. 그런데, 만약 복호화해야 할 암호문의 크기가 매우 큰 경우라면 제한된 메모리에 복호화된 정보를 무한정 저장해 놓고 있을 수가 없다. 여기서는 부가 정보를 고려한 암호화 및 인증 방식 5를 수정하여 적은 메모리로 암호문 변조 유무 파악 및 복호화 방식을 가능케 하는 방법을 소개한다. 이는 한 가지 예일 뿐, 비슷한 방식으로 다양한 암호화 및 인증 방식을 설계할 수 있다.
도 32와 같이 동작하여, 암호화 시 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다. n은 블록 크기를 뜻하며, n/2 만큼 순환 이동 양으로 예를 들었다. 이제는 복호화하는 방식을 설명한다. 복호화시 암호문과 인증 코드 값으로부터 암호 모듈은 복호화를 진행한다. 진행하는 동안 그림 32에서 부가 정보 처리 이후, 파란색으로 친 부분의 X 값을 암호 모듈은 임시로 저장해 놓는다. 그리고, 최종 인증 코드 T 값이 올바른 경우, X 값을 암호 모듈 밖으로 리턴하게 되면, X 값을 가지고 시스템은 복호화를 진행할 수 있게 된다.
이번에는 방식 6를 어떻게 바꿀 수 있는지 살펴보자. 도 33과 같이 동작하여, 암호화시 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다. 이제는 복호화하는 방식을 설명한다. 복호화시 암호문과 인증 코드 값으로부터 암호 모듈은 복호화를 진행한다. 진행하는 동안 도 33에서 부가 정보 처리 이후, 파란색으로 친 부분의 X 값을 암호 모듈은 임시로 저장해 놓는다. 그리고, 최종 인증 코드 T 값이 올바른 경우, X 값을 암호 모듈 밖으로 리턴하게 되면, X 값을 가지고 시스템은 복호화를 진행할 수 있게 된다.
마지막으로 방식 7를 어떻게 바꿀 수 있는지 살펴보자. 도 34과 같이 동작하여, 암호화시 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다. 이제는 복호화하는 방식을 설명한다. 복호화시 암호문과 인증 코드 값으로부터 암호 모듈은 복호화를 진행한다. 진행하는 동안 도 34에서 부가 정보 처리 이후, 파란색으로 친 부분의 X 값을 암호 모듈은 임시로 저장해 놓는다. 그리고, 최종 인증 코드 T 값이 올바른 경우, X 값을 암호 모듈 밖으로 리턴하게 되면, X 값을 가지고 시스템은 복호화를 진행할 수 있게 된다.
블록 암호 기반 키 공유 관련 비용에 관하여
먼저 공유 키를 암호 통신을 필요로 하는 두 암호 모듈에 직접 저장하는 방법을 사용할 수도 있다. 이는 높은 안전성을 요구하는 국방 혹은 의료 분야 등에서 사용될 수 있는 방법이다. 아니면, 공개키 기반 구조에 기반하여 통신하는 시점에 키 공유가 이루어지는 경우도 있다. 안전하지 않은 채널을 통한 키 공유는 일반적으로 공개키 기반 구조에 기반하여 설계될 수 있는데, 공개키 암호는 대칭키 암호에 비해서 속도가 현저히 느리나, 키와 같이 매우 짧은 데이터를 한번 만 처리하면 되기에 키 공유에 따른 부채널 대응 기법 비용이 전체 암호 통신 효율성 및 전력 소모량 측면에서 별 영향을 주지 않는다.
따라서 공개키 기반 구조를 사용하든 하지 않든, 실제 부채널 대응 비용은 비밀 키가 공유된 시점으로부터 대부분이 발생하기 때문에, 본 논문에서 제시된 방식이 크게 실제 암호 통신의 가용성 및 효용성 그리고 안전성에 큰 기여를 할 것으로 예상된다.
본 발명에서 제시된 안전한 암호 시스템을 위한 설계 논리는 앞으로 스마트 디바이스에서 부채널 공격에 대한 저메모리, 고안전성, 고효율성, 저비용을 요구할 경우에 사용될 수 있는 논리이며, 현존하는 설계 논리에 대한 근본적인 문제점을 해결한다는 점에 있어서 가치가 있다고 볼 수 있다.
또한, 향후 본 발명에서 제시한 논리의 방향에 의해 설계된 암호, 복호화, 인증 등 다양한 암호시스템 설계 기법의 신규 표준화가 요구되며, 이를 기초로 저비용으로 부채널 공격에 안전하면서도 고효율성을 갖는 스마트 디바이스 개발 및 제품화가 가능할 것으로 예상된다. 또한 본 발명을 통해 스마트 디바이스를 통한 다양한 신규 서비스 창출이 예상된다. 가령, 데이터 암호화, 음성 암호화, 영상 암호화, 온라인 결제, 인증 등을 스마트 디바이스 상에서 현실적으로 가능하게 된다.
한편, 상술 된 본 발명의 내용은 발명을 실시하기 위한 구체적인 실시 예들에 불과하다. 본 발명은 구체적이고 실제로 이용할 수 있는 수단 자체뿐 아니라, 장차 기술로 활용할 수 있는 추상적이고 개념적인 아이디어인 기술적 사상을 포함할 것이다.
본 발명에서 제시하는 치환 함수 기반 신규 설계 논리 아이디어
현존하는 암호화 및 인증 코드 값 생성 방식들은 기반이 되는 알고리즘이 부채널 공격에 안전하게 구현되어야 한다는 근본적인 문제점을 지니고 있다. 이러한 근본적인 문제점을 안고 가는 이상, 부채널 공격에 대해 저비용, 고효율, 고 안전성을 인갖는 구현 방법은 사실상 없는 상황이다. 따라서, 본 발명에서는 관점을 바꾸어, 운영 모드 차원에서 접근하고자 한다. 어떻게 하면, 기반 알고리즘에 대한 부채널 대응 기법 적용 없이 운영 모드 차원에서의 대응만으로 안전성을 제공할 수 있는가에 대한 것이다. 본 발명에서는, 운영모드 차원에서, 부채널 공격에 대해 저비용, 고 효율성, 고 안전성을 제공하는 암호화 및 인증 코드 값 생성하는 설계 논리 및 구현 방식을 제안한다.
부채널 공격의 핵심은 deterministic 또는 랜덤하지 않은 연산 과정을 수행하는 과정에서 비밀 정보를 부채널 정보로부터 축출하는 데에 있다. 따라서 매번 비밀 키가 랜덤하게 바뀌든지 또는 비밀 난스 (Nonce) 값이 매번 랜덤 하게 바뀌든지 해야 적은 연산으로 부채널 공격에 안전한 대응기법 마련이 가능하다. 보통 난스는 공개가 되는 값이나, 본 발명에서는 난스가 비밀 값의 일부인 경우로 고려한다. 만약, 키와 난스가 둘 다 고정되거나 추측이 가능하게 되면, 전체 연산과정의 보호 없이는 부채널 공격에 의해 키 추출이 가능하게 된다.
치환 함수가 기반한 여러 대표적인 알고리즘으로는 SHA-3, Grstl, JH 등이 있다. 본 발명에서는, 통신 환경에 적합한, 임의의 치환 함수 알고리즘으로 구현해도 상관이 없는 암호화 및 인증 코드 값을 생성하도록 돕는 암호시스템 설계 방식을 제안한다.
암호 통신에서 난스 값이 반복되어 사용될 경우, 전체 연산 과정이 deterministic이기 때문에, 부채널 공격에 의해 비밀 키가 노출될 위험이 있다. 따라서, 난스 값은 재 사용이 안되도록 하는 조치가 요구된다. 특히, 복호화시 난스 재사용을 막아야 한다. 또한, 난스가 노출될 경우, 키가 노출될 위험 또한 높게 되어 난스 자체도 암호화를 통해 보호를 해야 한다. 난스 재 사용에 대한 위험은 복호화 과정에서 나타난다. 공격자가 암호문을 위조할 경우 인증 코드 값이 다르게 되어, 인증 코드가 틀리게 나온 난스를 블랙리스트에 올려서 다시는 사용하지 못하도록 하는 것이다. 만약, 블랙 리스트의 크기가 매우 크게 되면, 다시 새롭게 키를 공유하고, 블랙 리스트들을 삭제한다. 이러한 블랙리스트 기반 방식 외에 여기서는 다른 방식들을 또한 소개한다. 난스 열 생성 방식과 암호화 및 인증 방식과 같이 두 부분으로 나누어 설명하고자 한다.
치환 함수 기반에서 난스 열 생성 방식
다행스럽게도 통신 환경에서의 암호화는 저장 데이터의 암호화가 아닌, 통신 자체의 암호화에 초점을 두고 있기 때문에, 난스 재사용을 막는 방법이 쉽게 구현될 수 있다. 두 암호 모듈 A와 B는 공유된 비밀 키 K로 부터 두 개의 난스 열 N1, N2, N3,...와 N'1, N'2, N'3,...를 생성한다.
난스 열을 다루는 방식에는 두 가지로 나누어 살펴볼 수 있는데, 첫째로, 난스 열을 암호 모듈 내에 저장해 놓는 방법이고, 둘째는 난스 열을 실시간으로 생성하는 방법이다. 먼저 난스 열을 암호 모듈 내에 저장해 놓는 방법을 설명하면, 암호문 복호화 시 얻어진 난스 값이 테이블에 존재할 경우 올바른 난스 값으로 받아들이고 복호화를 진행한다. 그리고 한번 사용된 난스는 삭제하여 난스 재사용을 막는다. 만약 올바른 난스 값이 아니면 복호화 중지하여 부채널 공격을 무력화시킨다. 두 번 째, 난스 열을 실시간으로 생성하는 방법을 설명하면, 암호문 복호화시 얻어진 난스 값이 사용되기로 예정된 난스 값이면 받아들이고 복호화를 진행하며, 아니면 복호화를 중지한다.
예를 들어, 다음의 도 35와 같이 공유된 비밀 키 K로 부터난스 열 N1, N2, N3,...와 N'1, N'2, N'3,...를 생성한다. 공유 키로부터 난스 열을 생성하였기에 두 암호 모듈 A와 B는 난스 열 또한 공유하게 된다. 여기서 보인 예는 한가지 예에 불과하며, 본 발명은 키를 통해 난스 열을 생성한다. 키 K는 초기에만 사용되고 그 이후에는 사용되지 않는다. Feedforward 연산 과정으로 인해 역 연산을 어렵게 한다.
공유 키를 이용하여 새로운 메시지를 암호화할 경우, 난스 사용은 (N1, N'1) 부터 순차적으로 사용하며, 만약 복호화 시 사용되어야 할 난스가 사용되지 않을 경우, 암호 모듈은 복호화를 수행하지 않는다. 실제 난스 열을 생성하는 것은 처음 비밀 키 K가 공유된 시점에서 난스 열을 생성하여 암호 모듈 내에 저장하는 방식을 취하거나, 아니면, 실시간으로 매번 이전 난스로부터 다음에 사용될 난스를 생성하여 사용할 수도 있다.
위의 난스 열 생성 알고리즘을 보면, 공유 비밀 키 K는 처음에 한번만 사용되고, const는 공개된 상수 값이며, 매번 비밀 난스 값이 업데이트되어 사용되기에, 어떤 상태에서도 동일한 비밀 정보가 반복적으로 사용되지 않아 부채널 공격 적용이 어렵도록 설계된다.
특히, 난수 열을 생성 시, 단순한 연산 대신 복잡한 압축 함수 연산을 사용하는 이유는, 잘 설계가 된 치환 함수를 사용할 경우, 각 난스 값 생성 시 좋은 난수 성질 또한 갖게 되기 때문이다. 좋은 난수성을 갖는 난스의 사용은 부채널 공격을 대응하는 데에 매우 필수적이다.
네 가지 치환 함수 기반 암호화 및 인증 방식
위에서 설명한 방식으로 난스 열이 주어졌을 경우, 네 가지 치환 함수 기반 암호화 및 인증 방식을 소개한다. 구성 방법은 SpongeWrap 모드와 유사한 점이 있으나, SpongeWrap모드는 부채널 공격에 대한 안전성을 고려하지 않고 설계된 암호 인증 방법인 반면, 본 문서에서 제안하는 방식은 부채널 공격까지 고려했을 때에 저비용, 고효율, 고안전성으로 통신 환경에서 구현될 수 있는 암호화 및 인증코드를 생성하는 방식이라는 특징을 지닌다.
치환 함수 기반 암호화 및 인증방식 1
임의의 길이의 메시지 M를 처리하기 위해서 패딩 방법 pad를 적용한 후, pad(M)=M1||M2||...||Mt 와 같이 표기한다. 특히, 안전성을 위하여 패딩 방법 pad는 prefix-free이어야 한다. 이는 임의의 서로 다른 두 메시지 M, M'에 대해, pad(M)은 결코 pad(M')의 prefix가 되어서는 안된다는 뜻이다. 도 36에서 보면, IV1과 IV2는 상수 값을 뜻하며, 이전에 사용된 const와 다른 상수 값이어야 한다. 그러면, 다음 그림과 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다.
치환 함수 기반 암호화 및 인증 방식 1을 설명하면, 암호문의 일부인 C0는 난스 N의 암호문이라고 보면 된다. 난스 N을 보호하기 위하여 암호화된 C0가 상대방 암호 모듈에 안전하지 않은 통신 채널을 통해 전달된다. 암호문을 전달받는 암호 모듈은 암호문을 복호화하기 위하여, 먼저 주어진 암호문의 첫번째 블록인C0로부터 N을 생성하고, N이 앞서 설명한 난스 생성 알고리즘의 요구 조건에 부합할 경우 N과 N'를 얻고, 복호화 과정을 수행하여 M1||...||Mt를 얻어내고, 최종적으로 인증 코드 값 T이 맞고 동시에 pad(M)= M1||...||Mt 인 M이 존재하면 M을 올바른 메시지로 받아들이고 M을 최종 출력하며, 틀리면 메시지에 변조가 있음을 알고, 오류 값을 출력한다.
부채널 공격 대응 방법 관점에서 방식 1의 설계 논리를 좀 더 설명하면, 매번 암호화 마다 다른 난스를 사용하므로, 치환 함수의 입력 값이 매번 랜덤하게 변하게 되어, 공격자로 하여금 내부 상태 값을 얻기가 어렵도록 만들었다. 도 37은 부채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 1에서 보호되어야 할 연산을 보여준다. 놀랍게도 메시지 크기와 상관 없이 초기의 XOR 연산을 최대 두 번만 보호만 해도 안전하게 된다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
치환 함수 기반 암호화 및 인증 방식 2
첫 번째 방식과 차이점은 임의의 패딩 함수 pad를 사용해도 된다는 장점이 있다. 단, 마지막 블록 처리를 다르게 하기 위해 const1를 연산하는 과정을 추가하였다. 다음 도 38과 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
치환 함수 기반 암호화 및 인증 방식 2를 설명하면, 암호문의 일부인 C0는 난스 N의 암호문이라고 보면 된다. 난스 N을 보호하기 위하여 암호화된 C0가 상대방 암호 모듈에 안전하지 않은 통신 채널을 통해 전달된다.
암호문을 전달받는 암호 모듈은 암호문을 복호화하기 위하여, 먼저 주어진 암호문의 첫 번째 블록인 C0로부터 N을 생성한다. N이 앞서 설명한 난스 생성 알고리즘의 요구 조건에 부합할 경우 N과 N'를 얻고, 복호화 과정을 수행하여 M1||...||Mt를 얻는다. 최종적으로 인증 코드값 T이 맞고 동시에 pad(M)= M1||...||Mt 인 M이 존재하면 M을 올바른 메시지로 받아들이고 M을 최종 출력하며, 틀리면 메시지에 변조가 있음을 알고, 오류 값을 출력한다.
도 39는 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 2에서 보호되어야 할 연산을 보여준다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
치환 함수 기반 암호화 및 인증 방식 3
두 번째 방식처럼 임의의 패딩 함수 pad를 사용해도 되며, 단 마지막 블록 처리를 다르게 하기 위해 상수 값을 더하는 대신, 마지막 인증 코드 생성 값 처리를 다르게 하였다. 도 40과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 -비트 값인 인증 코드 T를 얻는다.
도 41은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 3에서 보호되어야 할 연산을 보여준다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
치환 함수 기반 암호화 및 인증 방식 4
방식 4는 방식 1을 좀 더 변형한 방식으로, 암호화하는 과정 동안 공격자가 내부 상태 값을 안다고 할지라도 공격자는 이전의 암호문 및 올바른 인증 코드를 생성할 수 없도록 설계된다. 임의의 길이의 메시지 M를 처리하기 위해서 임의의 패딩 방법 pad를 적용한 후, pad(M)=M1||M2||...||Mt 와 같이 표기한다.
여기서는 방식 1과는 달리 패딩 방법 pad가 prefix-free일 필요 없다. 그 이유는 마지막에 N과 N'을 XOR 하는 연산을 수행하기 때문이다. 도 42와 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다. 방식 4의 특징은 매번 FeedFoward 연산 과정을 적용하고, 마지막에 난스 값 N, N'을 다시 적용함으로 N, N' 값을 모르고서는 내부 상태 정보를 알더라도 올바른 인증 코드 값을 생성할 수 없도록 한다.
도 43은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 4에서 보호되어야 할 연산을 보여준다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
치환 함수 기반에서 안전성 강화 옵션
앞에서 보인 치환 함수 기반 네 가지 방식에서 보호되어야 할 연산이 부채널 공격에 의해 안전하게 보호될 경우 안전하다고 말할 수 있으나, 만에 하나, 먼 훗날 신규 부 채널 공격 기술의 발전으로 대응 기법의 취약성으로 임의의 상태의 난스 값이 노출되면, 위의 방식들이 역연산을 할 수 있기 때문에, 공유 키 K가 쉽게 노출될 염려가 있다. 결국 공유 키의 노출은 과거의 통신 정보나 미래의 통신 정보 마저 노출될 위험을 안고 있다.
이처럼 극단적인 상황에서조차도, 과거와 미래의 통신 정보를 보호하기 위하여, 본 장에서는 비밀 공유 키 K로부터 암호화 키 열 생성 알고리즘, 난스 열 생성 알고리즘을 제시한다. 실시간 통신의 효율성과 직결되어, 통신의 효율성을 떨어뜨리기에 이 장에서는 생략하나, 이 역시 가능함을 명시해 둔다.
치환 함수 기반에서 안전성 강화를 위한 암호화 키 열 생성 방식
현재에 사용된 암호화 키가 노출된다고 할지라도, 과거와 이전에 사용된 키를 보호하기 위하여 도 44와 같이 매번 암호화에 대해 다르게 사용될 일회용 암호화 키 열K1, K2,... 생성한다. 각 일회용 암호화 키는 암호화 시 난스와 동일하게 한번의 암호화 당 한번씩만 사용되고, 다음 번의 암호화 시 암호화 키 열에서의 다음 번의 일회용 암호화 키를 이용한다.
앞에서 설명한 방식과의 차이는, 공격자가 임의 상태의 암호화 키 Ki 또는 난스 값 Ni를 알았다고 할지라도, 다른 암호화 키 값들 또는 난스 값들을 보호할 수 있다는 장점을 가진다. K1을 공격자가 얻었다고 할지라도, K2를 얻기 위해서는 키 열 생성 알고리즘의 내부 전체 블록 상태를 알아야 한다. 이를 위하여 공격자는 나머지 c 비트 정보에 대한 전수 조사를 해야 한다.
또한 추측한 키가 맞는지에 대해 통신을 통해 검증해야 하는 부가적인 오버헤드가 요구되기에 과거와 미래에 사용될 암호화 키를 보호할 수 있다는 장점을 가진다. 무엇보다, 공유 키 K가 주기적으로 업데이트가 될 경우, 어떤 시점에 사용된 공유 비밀 키에 대응되는 암호화 키 열을 설사 모두 알았다고 할지라도, 과거 혹은 새로 갱신된 공유된 비밀 키 정보를 얻는 데에는 전혀 도움이 되지 않는다.
치환 함수 기반에서 안전성 강화 위한 난스 열 생성 방식
난스 열 생성 방식은 약간 차이가 있는데, 예를 들어, 도 45와 같이, 매번 Ni, N'i 값을 얻기 위하여, 1/4 씩 정보만을 수집하여 계산한다. 따라서, 공격자가 만의 하나 난스 열 중 특정 난스 값을 얻었다고 할지라도, 이전의 난스와 이후의 난스를 얻는 데에는 도움이 되지 않음을 알 수 있다.
치환 함수 기반에서 헤드 정보 등 부가 정보의 인증까지 처리하고자 할 경우 옵션
앞에서는 난스와 메시지에 대한 암호문, 그리고 이에 대한 인증 코드 값만이 존재한다. 그런데 헤드 정보 등 공개된 정보와 함께 인증을 처리할 경우가 있다. 헤드 등과 같이 부가적인 정보를 처리하는 암호화 및 인증 방식을 AEAD (Authenticated Encryption with Associate Data) 라고 부른다. 이하에서는 부가 정보를 인증할 수 있도록 앞서 제시된 방식들을 어떻게 수정할 것인가에 대해 설명하고자 한다.
부가정보를 A라고 할 때, 먼저 A에 패딩을 하여 패딩 후 A의 크기가 블록 크기의 배수가 되도록 한다. 구체적으로, 패딩 방법을 pad라고 할 때, pad(A)=A1||...||Aj 처럼 패딩 후의 크기가 j 블록으로 표현된다고 하자. 예를 들어, 패딩 방법으로 10* 패딩 방법을 쓸 수 있다.
그러면 먼저 네 가지 방식에 대해 도 46부터 49에서 보여준 바와 같이 변형시켜 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
치환 함수 기반에서 r값이 작은 경우의 구현 방법에 대하여
블록 사이즈 r 값이 작게 되면, 비밀 키 값, 난스 값, 인증 코드 값의 비트 길이가 여러 블록이 될 수도 있다. 하지만, 보통은 키 값, 난스 값, 태그 값들은 일반적으로 고정된 길이의 비트 열이 되기에, 본 명세서에서는 이들의 비트 길이가 고정된 경우라 생각하고 앞서 설명한 방식들을 어떻게 변경할 것인가에 대한 아이디어를 설명하고자 한다.
치환 함수 기반 r 값이 작은 경우의 난스 열 생성 방식
치환 함수의 블록 크기 (r+c) 비트 크기 중 안전성의 문제로 인해 c 값은 반드시 커야 한다. 반면, r 값은 임의의 크기가 될 수 있어서 r 값이 작은 경우, 어느 정도의 안전도를 위해 적정 키 크기를 가져야 하는 비밀 키 K를 r 비트로 표현하는 데에 무리가 있다. 따라서, 다음 도 50과 같은 방식으로 난스 열 생성 방식을 수정할 수 있다.
키 값은 아무리 커도 r+c 비트 값보다는 작다고 가정할 때, keypad(K)=K*1||K*2 라고 하자. 여기서 keypad는 패딩 방법으로 10* 패딩이 될 수도 있고, 단순히 0* 패딩이 될 수도 있다. 이때K1은 r 비트, K2는 c 비트 값이 된다. 이때 난스 열을 도 50과 같이 생성한다. 여기서 feedforward 연산은 생략될 수 있다.
위의 방식 대신 K 값을 여러 r 비트 값으로 나누어 각 r 비트 마다 치환 함수를 적용하는 방법도 있으나, 위의 방식에 비해 구현 효율성이 떨어지는 관계로 생략한다.
치환 함수 기반에서 r 값이 작은 경우에 대한 암호화 키 열 생성 방식
공유 키 K로부터 암호화 키 열을 생성하고자 할 경우 다음과 같이 암호화 키를 생성할 수 있다. 키 값은 아무리 커도 r+c 비트 값보다는 작다고 가정할 때, keypad(K)=K*1||K*2 라고 하자. 여기서 keypad는 패딩 방법으로 10* 패딩이 될 수도 있고, 단순히 0* 패딩이 될 수도 있다. 이때 K1은 r 비트, K2는 c 비트 값이 된다. 이때 암호화 키 열은 도 51과 같은 방식으로 생성할 수 있다.
치환 함수 기반에서 r 값이 작은 경우에 대한 암호화 및 인증 방식
앞서 r 값이 작은 경우에 대해 난스 열, 암호화 키 열 생성 방법을 설명하였다. 이를 기초로, 암호화 및 인증 방식을 설명하고자 한다. 앞 서 네 가지 방식을 설명했는데, 여기서 부가 정보가 추가된 경우의 네 가지 방식을 어떻게 변경할 것인가를 살펴본다. 여기서 소개하는 방식으로, 부가 정보 인증이 필요 없는 경우에도 동일하게 적용할 수 있음을 말해 둔다.
난스 열 중 현재 상태의 난스 값을 N, N'으로 표현하고, 암호화 키 열 중 현재 상태의 암호화 키 값을 K, K' 로 표현한다. 각 방식들에 대해, 복호화 시 C0로부터 N의 값이 올바른 값인지 난스 열을 통해서 검증 한 후, N이 올바른 값이면 복호화를 진행한다.
여기서, r의 값이 1 비트 정보와 같이 작게 되면, 임의의 변조된 C0 값에 대해서 성립할 확률은 1/2이 된다. 하지만, 이 경우 설사 변조에 성공하더라도, 나머지 N' 값의 비트 크기가 크기 때문에 내부 상태 값들을 랜덤하게 만들게 된다. 다만, r의 값이 1이 되면, 바로 난스의 변조 유무 또는 반복 유무를 파악하는 시간이 늦어질 뿐, 결국 인증 코드로 변조 유무 또는 반복 사용 여부를 파악할 수 있게 된다. 따라서, 난스의 변조 유무 또는 반복 유무를 일찍 파악하기 위하여, r이 최소 10 비트 이상이 될 것을 권장한다.
그러면 네 가지 방식을 도 52에서 도 55에서 보인 바와 같이 변형시켜 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
치환 함수 기반에서 암호문 없이 인증 코드만 생성하고자 하는 경우
상황에 따라서 암호화 없이 인증 코드만 요구되는 경우 부채널 공격에 안전하도록 인증 코드 값인 인증 코드 값을 생성하고자 경우, 앞서 제시된 모든 방식들을 인증 코드만 생성하는 MAC 알고리즘으로 변경이 가능하다. 구체적으로, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T 중 C1||...||Ct을 생략한 채, C0||T 값 전체를 인증 코드로 정의를 내린다.
치환 함수 기반에서 인증 코드 없이 암호문만 생성하고자 하는 경우
상황에 따라서 인증 코드에 대한 필요 없이 암호화만 요구되는 경우 부채널 공격에 안전하도록 암호화를 수행하고자 하는 경우, 앞서 제시된 방식들의 출력 값 중 τ-비트 값인 인증 코드 T을 제외한 나머지 암호문 C(=C0||C1||...||Ct)만을 출력함으로 암호문을 생성할 수 있다.
치환 함수 기반에서 내부 상태 값이 공격자에게 노출되었을 때 암호화 키 또는 난스 값을 보호하는 기법에 관하여
지금까지 제시한 방식들은 내부 상태 값이 공격자에게 노출될 경우, 역 연산이 가능하게 되어 암호화 키 또는 난스 값이 노출될 위험이 노출한다. 이러한 상황은 구현 상의 실수에 의해서 발생할 수도 있고, 아니면 암호화 모듈이 아닌 일반 CPU에서 암호화를 수행하는 경우 발생할 수도 있다. 따라서, 이러한 극단적인 상황 속에서도 사용된 난스 또는 암호화 키 값을 보호하기 위하여 암호화하는 동안 치환 함수 과정 시 feedforward 연산 과정을 삽입함으로써 역연산이 어렵도록 할 수 있게 된다. 이때 역연산의 어려움은 바로 난스 값 혹은 암호화 키를 공격자가 얻는 것이 어렵게 하는 데 효과적인 대응 방법으로 사용될 수 있다.
치환 함수 기반에서 난스 값만을 이용한 암호화 및 인증 방법
지금까지는 암호화 키 (열)와 난스 열을 기반한 암호화 및 인증 방법을 소개하였다. 여기서는 암호화 키 없이 난스 열만을 이용한 암호화 방식을 소개한다. 여기서 소개한 방식은 부가 정보가 적용된 경우에 대해서도 동일하게 적용된다. 또한, 여기서 소개하는 방식들은 부채널 공격 대응 기법 적용이 전혀 필요가 없는 방식들이다.
치환 함수 기반 난스 기반 암호화 및 인증 방식 1
앞서 소개한 방식 1을 난스 기반으로 변환하는 방법을 제시한다. 도 56을 보면 난스 열 중 해당 (N,N') 을 이용하여 복호화 하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
치환 함수 기반 난스 기반 암호화 및 인증 방식 2
앞서 소개한 방식 2를 난스 기반으로 변환하는 방법을 제시한다. 도 57를 보면 난스 열 중 해당 (N,N') 을 이용하여 복호화하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
치환 함수 기반 난스 기반 암호화 및 인증 방식 3
앞서 소개한 방식 3을 난스 기반으로 변환하는 방법을 제시한다. 도 58를 보면 난스 열 중 해당 (N,N') 을 이용하여 복호화하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
치환 함수 기반 난스 기반 암호화 및 인증 방식 4
앞서 소개한 방식 4를 난스 기반으로 변환하는 방법을 제시한다. 도 59를 보면 난스 열 중 해당 (N,N') 을 이용하여 복호화 하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
치환 함수 기반 난스에 대한 동기화 과정 없는 암호화 및 인증 방식
지금까지 소개된 방식들은 두 암호 모듈 사이에 복호화가 제대로 이루어지기 위해서는 난스가 동기화 되어야 한다는 요구 조건을 필요로 한다. 만약, 난스에 대한 동기화가 어려운 경우, 초기 XOR 연산에 대한 부채널 공격 대응 기법 적용이 요구되며, 그리고 난스 N에 대한 암호화 값인 C0로부터 난스 N을 계산 한 후, N으로부터 N'을 생성할 수 있는 방식을 따로 개발해야 한다. 예를 들어, 도 60과 같은 방식으로 N으로부터 N'을 생성한다. 단, N'의 난수성은 N의 난수성에 의존하기에, N의 비트 크기가 커야 한다는 요구 사항이 추가된다.
복호화 시 인증 코드가 맞지 않은 경우에 각 암호 모듈은 사용된 난스 값을 자신의 모듈 내의 테이블에 저장한다. 이는 사용을 금지해야 할 난스 값들을 저장한 테이블이다. 두 암호 모듈 사이에 테이블을 공유할 필요는 없다. 왜냐하면, 공격자가 이전에 사용된 C0에 대해 암호문 또는 인증 코드에 변조를 가할 경우, 복호화 시 인증 코드가 불일치하게 되어 공격 목적으로 반복 사용된 C0 값에 대한 검증이 가능하게 된다.
또한, 공격자가 공격에 이용할 수 있는 동일 C0가 사용된 암호화 및 복호화 과정은 최대 4 번이다. 이는 각 모듈에 동일한 C0 값이 최대 2번씩 적용될 수 있기 때문이다. 하지만, 동일 C0가 사용된 4번의 부채널 정보를 이용하여 공격자가 공격하는 것이 현실적으로 어렵기 때문에, 이는 안전성 위협의 고려 대상이 아니다.
치환 함수 기반에서 복호화해야 할 암호문의 크기가 큰 경우 (즉, 암호 모듈 내의 메모리 크기가 제한적인 경우)
암호문에 대한 변조가 없음이 파악되기 전까지는 암호모듈 밖으로 복호화된 정보, 즉 평문 값의 일부라도 암호 모듈 밖으로 새나가서는 안된다. 그런데, 만약 복호화해야 할 암호문의 크기가 매우 큰 경우라면 제한된 메모리에 복호화된 정보를 무한정 저장해 놓고 있을 수가 없다. 여기서는 부가 정보를 고려한 암호화 및 인증 방식 4를 수정하여 적은 메모리로 암호문 변조 유무 파악 및 복호화 방식을 가능케 하는 방법을 소개한다. 이는 한 가지 예일 뿐, 비슷한 방식으로 다양한 암호화 및 인증 방식을 설계할 수 있다.
도 61과 같이 동작하여, 암호화시 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드T를 얻는다. 이제는 복호화하는 방식을 설명한다. 복호화시 암호문과 인증 코드 값으로부터 암호 모듈은 복호화를 진행한다. 진행하는 동안 도 61에서 부가 정보 처리 이후, 파란색으로 친 부분의 X, Y 값을 암호 모듈은 임시로 저장해 놓는다. 그리고, 최종 인증 코드 T 값이 올바른 경우, X, Y 값을 암호 모듈 밖으로 리턴하게 되면, X, Y 값을 가지고 시스템은 복호화를 진행할 수 있게 된다.
치환 함수 기반에서 키 공유 관련 비용에 관하여
먼저 공유 키를 암호 통신을 필요로 하는 두 암호 모듈에 직접 저장하는 방법을 사용할 수도 있다. 이는 높은 안전성을 요구하는 국방 혹은 의료 분야 등에서 사용될 수 있는 방법이다. 아니면, 공개키 기반 구조에 기반하여 통신 하는 시점에 키 공유가 이루어지는 경우도 있다. 안전하지 않는 채널을 통한 키 공유는 일반적으로 공개키 기반 구조에 기반하여 설계될 수 있다. 공개키 암호는 대칭키 암호에 비해서 속도가 현저히 느리나, 키와 같이 매우 짧은 데이터를 한 번만 처리하면 되기에 키 공유에 따른 부채널 대응 기법 비용이 전체 암호 통신 효율성 및 전력 소모량 측면에서 별 영향을 주지 않는다.
따라서 공개키 기반 구조를 사용하든 하지 않든, 실제 부채널 대응 비용은 비밀 키가 공유된 시점으로부터 대부분이 발생하기 때문에, 본 논문에서 제시된 방식이 크게 실제 암호 통신의 가용성 및 효용성 그리고 안전성에 크게 기여할 것으로 예상된다.
본 문서에서는 치환 함수에 기반한 암호화 및 인증 코드 생성 방법을 제시하고, 현존하는 방식들과 달리 저비용, 고 효율, 고 안전성으로 부채널 공격 대응이 가능함을 보여주었다. 특히, 보호해야 할 XOR 연산의 수는 메시지 크기와 상관 없이 2 개로 고정된 것을 보게 된다. 이는 부채널 대응 기법을 오직 2 개의 XOR 연산만 해도 되기에 구현 시 매우 큰 장점을 지닌다. 블록 암호처럼 아직까지 치환 함수에 대한 표준은 존재하지 않으나, 본 연구 결과는 치환 함수의 표준화의 중요성을 보여주며, SHA-3와 같이 표준화될 알고리즘의 기반이 되는 치환 함수를 사용하여 본 문서에서 제시한 암호화 및 인증 코드 생성 방법을 구현할 수도 있다.
본 발명에 따른 압축 함수 기반 신규 설계 논리 아이디어
현존하는 암호화 및 인증 코드 값 생성 방식들은 기반이 되는 알고리즘이 부채널 공격에 안전하게 구현되어야 한다는 근본적인 문제점을 지니고 있다. 이러한 근본적인 문제점을 안고 가는 이상, 부채널 공격에 대해 저비용, 고효율, 고 안전성을 갖는 구현 방법은 사실상 없는 상황이다. 따라서, 본 발명에서는 관점을 바꾸어, 운영 모드 차원에서 접근하고자 한다. 어떻게 하면, 기반 알고리즘에 대한 부채널 대응 기법 적용 없이 운영 모드 차원에서의 대응만으로 안전성을 제공할 수 있는가에 대한 것이다. 본 발명에서는, 운영모드 차원에서, 부채널 공격에 대해 저비용, 고 효율성, 고 안전성을 제공하는 암호화 및 인증 코드 값 생성하는 설계 논리 및 구현 방식을 제안한다.
부채널 공격의 핵심은 deterministic 또는 랜덤하지 않은 연산 과정을 수행하는 과정에서 비밀 정보를 부채널 정보로부터 축출하는 데에 있다. 따라서 매번 비밀 키가 랜덤하게 바뀌든지 또는 비밀 난스 (Nonce) 값이 매번 랜덤 하게 바뀌든지 해야 적은 연산으로 부채널 공격에 안전한 대응기법 마련이 가능하다. 보통 난스는 공개가 되는 값이나, 본 발명에서는 난스가 비밀 값의 일부인 경우로 고려한다. 만약, 키와 난스가 둘 다 고정되거나 추측이 가능하게 되면, 전체 연산과정의 보호 없이는 부채널 공격에 의해 키 추출이 가능하게 된다.
압축 함수가 기반한 여러 대표적인 알고리즘으로는 SHA-1, SHA-2 등이 있다. 본 발명에서는, 통신 환경에 적합한, 임의의 치환 함수 알고리즘으로 구현해도 상관이 없는 암호화 및 인증 코드 값을 생성하도록 돕는 암호시스템 설계 방식을 제안한다.
암호 통신에서 난스 값이 반복되어 사용될 경우, 전체 연산 과정이 deterministic이기 때문에, 부채널 공격에 의해 비밀 키가 노출될 위험이 있다. 따라서, 난스 값은 재 사용이 안되도록 하는 조치가 요구된다. 특히, 복호화시 난스 재사용을 막아야 한다. 또한, 난스가 노출될 경우, 키가 노출될 위험 또한 높게 되어 난스 자체도 암호화를 통해 보호를 해야 한다.
난스 재 사용에 대한 위험은 복호화 과정에서 나타난다. 공격자가 암호문을 위조할 경우 인증 코드 값이 다르게 되어, 인증 코드가 틀리게 나온 난스를 블랙리스트에 올려서 다시는 사용하지 못하도록 하는 것이다. 만약, 블랙 리스트의 크기가 매우 크게 되면, 다시 새롭게 키를 공유하고, 블랙 리스트들을 삭제한다. 이러한 블랙리스트 기반 방식 외에 여기서는 다른 방식들을 또한 소개한다. 난스 열 생성 방식과 암호화 및 인증 방식과 같이 두 부분으로 나누어 설명하고자 한다.
압축 함수 기반 난스 열 생성 방식
다행스럽게도 통신 환경에서의 암호화는 저장 데이터의 암호화가 아닌, 통신 자체의 암호화에 초점을 두고 있기 때문에, 난스 재사용을 막는 방법이 쉽게 구현될 수 있다. 두 암호 모듈 A와 B는 공유된 비밀 키 K로 부터두 개의 난스 열 (N1, N'1, N''1), (N2, N'2, N''2),...를 생성한다.
난스 열을 다루는 방식에는 두 가지로 나누어 살펴볼 수 있다. 첫째는 난스 열을 암호 모듈 내에 저장해 놓는 방법이다. 난스 열을 암호 모듈 내에 저장해 놓는 방법을 설명하면, 암호문 복호화 시 얻어진 난스 값이 테이블에 존재할 경우 올바른 난스 값으로 받아들이고 복호화를 진행한다. 그리고 한번 사용된 난스는 삭제하여 난스 재사용을 막는다. 만약 올바른 난스 값이 아니면 복호화 중지하여 부채널 공격을 무력화시킨다.
둘째는 난스 열을 실시간으로 생성하는 방법이다. 난스 열을 실시간으로 생성하는 방법을 설명하면, 암호문 복호화시 얻어진 난스 값이 사용되기로 예정된 난스 값이면 받아들이고 복호화를 진행하며, 아니면 복호화를 중지한다. 예를 들어, 다음의 도 62와 같이 공유된 비밀 키 K로 부터 두 개의 난스 열 (N1, N'1, N''1), (N2, N'2, N''2),...를 생성한다. 공유 키로부터 난스 열을 생성하였기에 두 암호 모듈 A와 B는 난스 열 또한 공유하게 된다.
여기서 보인 예는 한가지 예에 불과하며, 본 발명은 키를 통해 난스 열을 생성하며, 키 K는 초기에만 사용되고 그 이후에는 사용되지 않으며, feedforward 연산 과정으로 인해 역 연산을 어렵게 할 수 있다.
공유 키를 이용하여 새로운 메시지를 암호화할 경우, 난스 사용은 (N1, N'1, N''1) 부터 순차적으로 사용하며, 만약 복호화 시 사용되어야 할 난스가 사용되지 않을 경우, 암호 모듈은 복호화를 수행하지 않는다. 실제 난스 열을 생성하는 것은 처음 비밀 키 K가 공유된 시점에서 난스 열을 생성하여 암호 모듈 내에 저장하는 방식을 취하거나, 아니면, 실시간으로 매번 이전 난스로부터 다음에 사용될 난스를 생성하여 사용할 수도 있다.
위의 난스 열 생성 알고리즘을 보면, 공유 비밀 키 K는 처음에 한번만 사용되고, const, const', const''은 공개된 상수 값이며, 매번 비밀 난스 값이 업데이트되어 사용되기에, 어떤 상태에서도 동일한 비밀 정보가 반복적으로 사용되지 않아 부채널 공격 적용이 어렵게 설계되어 있음을 알 수 있다.
특히, 난수 열을 생성 시, 단순한 연산 대신 복잡한 압축 함수 연산을 사용하는 이유는, 잘 설계가 된 압축 함수를 사용할 경우, 각 난스 값 생성 시 좋은 난수 성질 또한 갖게 되기 때문이다. 좋은 난수성을 갖는 난스의 사용은 부채널 공격을 대응하는 데에 매우 필수적이다.
네 가지 압축 함수 기반 암호화 및 인증 방식
위에서 설명한 방식으로 난스 열이 주어졌을 경우, 네 가지 암호화 및 인증 방식을 소개한다.
압축 함수 기반 암호화 및 인증방식 1
임의의 길이의 메시지 M를 처리하기 위해서 패딩 방법 pad를 적용한 후, pad(M)=M1||M2||...||Mt 와 같이 표기한다. 특히, 안전성을 위하여 패딩 방법 pad는 prefix-free이어야 한다. 이는 임의의 서로 다른 두 메시지 M, M'에 대해, pad(M)은 결코 pad(M')의 prefix가 되어서는 안 된다는 뜻이다. 도 63을 보면, IV1과 IV2는 상수 값을 뜻하며, 이전에 사용된 const, const', const'' 와 다른 상수 값이어야 한다. 그러면, 다음 그림과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||||Ct)와 -비트 값인 인증 코드T를 얻는다.
압축 함수 기반 암호화 및 인증 방식 1을 설명하면, 암호문의 일부인 C0는 난스 N의 암호문이라고 보면 된다. 난스 N을 보호하기 위하여 암호화된 C0가 상대방 암호 모듈에 안전하지 않은 통신 채널을 통해 전달된다.
암호문을 전달받는 암호 모듈은 암호문을 복호화하기 위하여, 먼저 주어진 암호문의 첫번째 블록인 C0로부터 N을 생성한다. N이 앞서 설명한 난스 생성 알고리즘의 요구 조건에 부합할 경우, N'과 N''를 얻고, 복호화 과정을 수행하여 M1||...||Mt를 얻는다. 최종적으로 인증 코드 값 T이 맞고 동시에 pad(M)= M1||...||Mt 인 M이 존재하면 M을 올바른 메시지로 받아들이고 M을 최종 출력하며, 틀리면 메시지에 변조가 있음을 알고, 오류 값을 출력한다.
부채널 공격 대응 방법 관점에서 방식 1의 설계 논리를 좀 더 설명하면, 매번 암호화 마다 다른 난스를 사용하므로, 압축 함수의 입력 값이 매번 랜덤하게 변하게 되어, 공격자로 하여금 내부 상태 값을 얻기 어렵게 한다.
도 64는 부채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 1에서 보호되어야 할 연산을 보여준다. 메시지 크기와 상관없이 초기의 XOR 연산을 최대 세 번만 보호만 해도 안전하게 된다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
압축 함수 기반 암호화 및 인증 방식 2
첫 번째 방식과 차이점은 임의의 패딩 함수 pad를 사용해도 된다는 장점이 있다. 단, 마지막 블록 처리를 다르게 하기 위해 const1를 연산하는 과정을 추가하였다. 도 65와 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
도 66은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 2에서 보호되어야 할 연산을 보여준다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
압축 함수 기반 암호화 및 인증 방식 3
두 번째 방식처럼 임의의 패딩 함수 pad를 사용해도 되며, 단 마지막 블록 처리를 다르게 하기 위해 상수 값을 더하는 대신, 마지막 인증 코드 생성 값 처리를 다르게 하였다. 도 67과 같이 암호화 및 인증을 수행하여, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
도 68은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 3에서 보호되어야 할 연산을 보여준다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
압축 함수 기반 암호화 및 인증 방식 4
임의의 패딩 함수 pad를 사용해도 되며, 마지막에 블록 처리시 난스 N', N''을 이용하였다. 도 69와 같이 암호화 및 인증을 수행하여, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
도 70은 부 채널 공격에 안전하도록 하기 위해서 암호화 및 인증 방식 4에서 보호되어야 할 연산을 보여준다. 키와 초기치가 적용되는 첫번째 블록 연산을 반복 수행할 경우 template attack 등과 같은 부채널 공격에 취약할 가능성이 있다. 따라서, 키와 초기치로부터 난스 값과 XOR될 값들을 매번 계산하지 않고, 미리 저장해 놓고, 필요할 때마다 사용한다.
압축 함수 기반에서 안전성 강화 옵션
앞에서 보인 네 가지 방식에서 보호되어야 할 연산이 부채널 공격에 의해 안전하게 보호될 경우 안전하다고 말할 수 있다. 신규 부 채널 공격 기술의 발전으로 대응 기법의 취약성으로 임의의 상태의 난스 값이 노출 되면, 위의 방식들이 역연산이 가능하기에, 공유 키 K가 쉽게 노출될 염려가 있다. 결국 공유 키의 노출은 과거의 통신 정보나 미래의 통신 정보마저 노출될 위험을 안고 있다.
이처럼 극단적인 상황에서조차도, 과거와 미래의 통신 정보를 보호하기 위하여, 본 장에서는 비밀 공유 키 K로부터 암호화 키 열 생성 알고리즘, 난스 열 생성 알고리즘을 제시한다. 실시간 통신의 효율성과 직결되어, 통신의 효율성을 떨어뜨리기에 이 장에서는 생략하나, 이 역시 가능함을 명시해 둔다.
압축 함수 기반에서 안전성 강화를 위한 암호화 키 열 생성 방식
현재에 사용된 암호화 키가 노출된다고 할지라도, 과거와 이전에 사용된 키를 보호하기 위하여 도 71과 같이 매번 암호화에 대해 다르게 사용될 일회용 암호화 키 열K1, K2, 생성한다. 각 일회용 암호화 키는 암호화 시 난스와 동일하게 한번의 암호화 당 한 번씩만 사용된다. 다음 번의 암호화 시 암호화 키 열에서의 다음 번의 일회용 암호화 키를 이용한다.
앞에서 설명한 방식과의 차이는, 공격자가 임의 상태의 암호화 키 Ki 또는 난스 값 Ni를 알았다고 할지라도, 다른 암호화 키 값들 또는 난스 값들을 보호할 수 있다는 장점을 가진다. K1을 공격자가 얻었다고 할지라도, K2를 얻기 위해서는 키 열 생성 알고리즘의 내부 전체 블록 상태를 알아야 한다. 이를 위하여 공격자는 나머지 c 비트 정보에 대한 전수 조사를 해야 한다. 또한, 추측한 키가 맞는지에 대해 통신을 통해 검증해야 하는 부가적인 오버헤드가 요구되기에 과거와 미래에 사용될 암호화 키를 보호할 수 있다는 장점을 가진다.
무엇보다, 공유 키 K가 주기적으로 업데이트가 될 경우, 어떤 시점에 사용된 공유 비밀 키에 대응되는 암호화 키 열을 설사 모두 알았다고 할지라도, 과거 혹은 새로 갱신된 공유된 비밀 키 정보를 얻는 데에는 전혀 도움이 되지 않는다.
압축 함수 기반에서 헤드 정보 등 부가 정보의 인증까지 처리하고자 할 경우 옵션
앞에서는 난스와 메시지에 대한 암호문, 그리고 이에 대한 인증 코드 값만이 존재했는데, 때론 헤드 정보 등 공개된 정보와 함께 인증을 처리할 경우가 있다. 헤드 등과 같이 부가적인 정보를 처리하는 암호화 및 인증 방식을 AEAD (Authenticated Encryption with Associate Data) 라고 부른다. 본 절에서는 부가 정보를 인증할 수 있도록 앞서 제시된 방식들을 어떻게 수정할 것인가에 대해 설명하고자 한다.
부가정보를 A라고 할 때, 먼저 A에 패딩을 하여 패딩 후 A의 크기가 블록 크기의 배수가 되도록 한다. 구체적으로, 패딩 방법을 pad라고 할 때, pad(A)=A1||...||Aj 처럼 패딩 후의 크기가 j 블록으로 표현된다고 하자. 예를 들어, 패딩 방법으로 10* 패딩 방법을 쓸 수 있다.
그러면 먼저 네 가지 방식에 대해 도 72부터 75에서 보여준 바와 같이 변형시켜 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
압축 함수 기반에서 r값이 작은 경우의 구현 방법에 대하여
블록 사이즈 r 값이 작게 되면, 비밀 키 값, 난스 값, 인증 코드 값의 비트 길이가 여러 블록이 될 수도 있다. 하지만, 보통은 키 값, 난스 값, 인증 코드 값들은 일반적으로 고정된 길이의 비트 열이 되기 때문에, 본 명세서에서는 이들의 비트 길이가 고정된 경우라 생각하고 앞서 설명한 방식들을 어떻게 변경할 것인가에 대한 아이디어를 설명하고자 한다.
압축 함수 기반에서 r 값이 작은 경우에 대한 암호화 키 열 생성 방식
공유 키 K로부터 암호화 키 열을 생성하고자 할 경우 다음과 같이 암호화 키를 생성할 수 있다. 키 값은 아무리 커도 r+c 비트 값보다는 작다고 가정할 때, keypad(K)=K*1||K*2 라고 하자. 여기서 keypad는 패딩 방법으로 10* 패딩이 될 수도 있고, 단순히 0* 패딩이 될 수도 있다. 이때 K1은 r 비트, K2는 c 비트 값이 된다. 이때 암호화 키 열은 도 76과 같은 방식으로 생성할 수 한다.
압축 함수 기반에서 r 값이 작은 경우에 대한 암호화 및 인증 방식
앞서 r 값이 작은 경우에 대해 난스 열, 암호화 키 열 생성 방법을 설명하였다. 이를 기초로, 암호화 및 인증 방식을 설명하고자 한다. 앞 서 네 가지 방식을 설명했는데, 여기서 부가 정보가 추가된 경우의 세 가지 방식을 어떻게 변경할 것인가를 살펴본다. 여기서 소개하는 방식으로, 부가 정보 인증이 필요 없는 경우에도 동일하게 적용할 수 있음을 말해 둔다.
난스 열 중 현재 상태의 난스 값을 N, N', N''으로 표현하였고, 암호화 키 열 중 현재 상태의 암호화 키 값을 K, K' 으로 표현하였다. 각 방식들에 대해, 복호화 시 C0로부터 N의 값이 올바른 값인지 난스 열을 통해서 검증 한 후, N이 올바른 값이면 복호화를 진행한다.
여기서 r의 값이 1 비트 정보와 같이 작게 되면, 임의의 변조된 C0 값에 대해서 성립할 확률은 1/2이 된다. 하지만, 이 경우 설사 변조에 성공하더라도, 나머지 N' 값의 비트 크기가 크기 때문에 내부 상태 값들을 랜덤하게 만들게 된다. 다만, r의 값이 1이 되면, 바로 난스의 변조 유무 또는 반복 유무를 파악하는 시간이 늦어질 뿐, 결국 인증 코드로 변조 유무 또는 반복 사용 여부를 파악할 수 있게 된다. 따라서, 난스의 변조 유무 또는 반복 유무를 일찍 파악하기 위하여, r이 최소 10 비트 이상이 될 것을 권장한다.
그러면 네 가지 방식을 도 77에서 도 80에서 보인 바와 같이 변형시켜 암호문과 인증 코드를 생성한다. 즉, 부가 정보 A는 암호문의 크기에는 변화를 주지 않고, 단지 인증 코드 생성시에만 영향을 준다. 즉, 암호문C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다.
압축 함수 기반에서 암호문 없이 인증 코드만 생성하고자 하는 경우
상황에 따라서 암호화 없이 인증 코드만 요구되는 경우 부채널 공격에 안전하도록 인증 코드 값인 인증 코드 값을 생성하고자 경우, 앞서 제시된 모든 방식들을 인증 코드만 생성하는 MAC 알고리즘으로 변경이 가능하다. 구체적으로, 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T 중 C1||...||Ct을 생략한 채, C0||T 값 전체를 인증 코드로 정의를 내린다.
압축 함수 기반에서 인증 코드 없이 암호문만 생성하고자 하는 경우
상황에 따라서 인증 코드에 대한 필요 없이 암호화만 요구되는 경우 부채널 공격에 안전하도록 암호화를 수행하고자 하는 경우, 앞서 제시된 방식들의 출력 값 중 τ-비트 값인 인증 코드 T을 제외한 나머지 암호문 C(=C0||C1||...||Ct)만을 출력함으로 암호문을 생성할 수 있다.
압축 함수 기반에서 내부 상태 값이 공격자에게 노출되었을 때 암호화 키 또는 난스 값을 보호하는 기법에 관하여
지금까지 제시한 방식들은 압축 함수가 역연산이 쉽게 가능할 경우에 대해 내부 상태 값이 공격자에게 노출될 경우, 역 연산으로 말미암아 암호화 키 또는 난스 값이 노출될 위험이 노출한다. 이러한 상황은 구현 상의 실수에 의해서 발생할 수도 있고, 아니면 암호화 모듈이 아닌 일반 CPU에서 암호화를 수행하는 경우 발생할 수도 있다. 따라서, 이러한 극단적인 상황 속에서도 사용된 난스 또는 암호화 키 값을 보호하기 위하여 암호화하는 동안 압축 함수 과정 시 내부적으로 역연산이 어렵도록 하도록 압축 함수를 설계하거나 또는 압축 함수 외부에 feedforward 연산 과정을 삽입함으로써 역연산이 어렵도록 할 수 있게 된다. 이때 역연산의 어려움은 바로 난스 값 혹은 암호화 키를 공격자가 얻는 것이 어렵게 하는 데 효과적인 대응 방법으로 사용될 수 있다.
압축 함수 기반에서 난스 값만을 이용한 암호화 및 인증 방법
지금까지는 암호화 키 (열)와 난스 열을 기반한 암호화 및 인증 방법을 소개하였다. 여기서는 암호화 키 없이 난스 열만을 이용한 암호화 방식을 소개한다. 여기서 소개한 방식은 부가 정보가 적용된 경우에 대해서도 동일하게 적용된다. 또한, 여기서 소개하는 방식들은 부채널 공격 대응 기법 적용이 전혀 필요가 없는 방식들이다. 특히, 난스 열 생성 방식에 좀 더 개선할 여지가 있는데 도 81를 먼저 설명하면, 한번의 압축 함수 연산으로 (N, N') 각각을 을 생성한다.
압축 함수 기반에서 난스 기반 암호화 및 인증 방식 1
앞서 소개한 방식 1을 난스 기반으로 변환하는 방법을 제시한다. 도 81에서 생성된 난스를 이용하여 도 82에서와 같이 난스 열 중 해당 (N,N') 을 이용하여 복호화 하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
압축 함수 기반에서 난스 기반 암호화 및 인증 방식 2
앞서 소개한 방식 2를 난스 기반으로 변환하는 방법을 제시한다. 도 81에서 생성된 난스를 이용하여 도 83에서와 같이 난스 열 중 해당 (N,N') 을 이용하여 복호화 하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
압축 함수 기반에서 난스 기반 암호화 및 인증 방식 3
앞서 소개한 방식 3를 난스 기반으로 변환하는 방법을 제시한다. 도 81에서 생성된 난스를 이용하여 도 84에서와 같이 난스 열 중 해당 (N,N') 을 이용하여 복호화 하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
압축 함수 기반에서 난스 기반 암호화 및 인증 방식 4
앞서 소개한 방식 4를 난스 기반으로 변환하는 방법을 제시한다. 도 81에서 생성된 난스를 이용하여 도 85에서와 같이 난스 열 중 해당 (N,N') 을 이용하여 복호화 하고자 하는 경우, C0로부터 동일한 N의 값이 복호화가 되면, 올바른 난스로 인식하고, 계속해서 복호화를 진행하고, 최종 인증 코드 T 값이 올바르고, 메시지 패딩이 올바르게 되어 있으면, 해당 메시지를 출력하고, 만약 오류가 있으면 메시지 출력 없이 오류가 있다고만 출력한다.
압축 함수 기반에서 난스에 대한 동기화 과정 없는 암호화 및 인증 방식
지금까지 소개된 방식들은 두 암호 모듈 사이에 복호화가 제대로 이루어지기 위해서는 난스가 동기화 되어야 한다는 요구 조건을 필요로 하였다. 만약, 난스에 대한 동기화가 어려운 경우, 초기 세 개의 XOR 연산에 대한 부채널 대응 기법 적용이 요구되며, 그리고, 난스 N에 대한 암호화 값인 C0로부터 난스 N을 계산 한 후, N으로부터 N', N''을 생성할 수 있는 방식을 따로 개발해야 한다. 예를 들어, 도 86과 같은 방식으로 N으로부터 N', N''을 생성한다. 단, N'과 N''의 난수성은 N의 난수성에 의존하기에, N의 비트 크기가 커야 한다는 요구 사항이 추가된다.
복호화 시 인증 코드가 맞지 않은 경우에 각 암호 모듈은 사용된 난스 값을 자신의 모듈 내의 테이블에 저장한다. 이는 사용을 금지해야 할 난스 값들을 저장한 테이블이다. 두 암호 모듈 사이에 테이블을 공유할 필요는 없다. 왜냐하면, 공격자가 이전에 사용된 C0에 대해 암호문 또는 인증 코드에 변조를 가할 경우, 복호화 시 인증 코드가 불일치하게 되어 공격 목적으로 반복 사용된 C0 값에 대한 검증이 가능하게 된다. 또한 공격자가 공격에 이용할 수 있는 동일 C0가 사용된 암호화 및 복호화 과정은 최대 4 번이다. 이는 각 모듈에 동일한 C0 값이 최대 2번씩 적용될 수 있기 때문이다. 하지만, 동일 C0가 사용된 4번의 부채널 정보를 이용하여 공격자가 공격하는 것이 현실적으로 어렵기 때문에, 이는 안전성 위협의 고려 대상이 아니다.
압축 함수 기반에서 복호화해야 할 암호문의 크기가 큰 경우 (즉, 암호 모듈 내의 메모리 크기가 제한적인 경우)
암호문에 대한 변조가 없음이 파악되기 전까지는 암호모듈 밖으로 복호화된 정보, 즉 평문 값의 일부라도 암호 모듈 밖으로 새나가서는 안된다. 그런데, 만약 복호화해야 할 암호문의 크기가 매우 큰 경우라면 제한된 메모리에 복호화된 정보를 무한정 저장해 놓고 있을 수가 없다. 여기서는 부가 정보를 고려한 암호화 및 인증 방식 4를 수정하여 적은 메모리로 암호문 변조 유무 파악 및 복호화 방식을 가능케 하는 방법을 소개한다. 이는 한 가지 예일 뿐, 비슷한 방식으로 다양한 암호화 및 인증 방식을 설계할 수 있다.
도 87과 같이 동작하여, 암호화시 암호문 C(=C0||C1||...||Ct)와 τ-비트 값인 인증 코드 T를 얻는다. 이제는 복호화하는 방식을 설명한다. 복호화시 암호문과 인증 코드 값으로부터 암호 모듈은 복호화를 진행한다. 진행하는 동안 도 87에서 부가 정보 처리 이후, 파란색으로 친 부분의 X, Y 값을 암호 모듈은 임시로 저장해 놓는다. 그리고, 최종 인증 코드 T 값이 올바른 경우, X, Y 값을 암호 모듈 밖으로 리턴하게 되면, X, Y 값을 가지고 시스템은 복호화를 진행할 수 있게 된다.
압축 함수 기반에서 키 공유 관련 비용에 관하여
먼저 공유 키를 암호 통신을 필요로 하는 두 암호 모듈에 직접 저장하는 방법을 사용할 수도 있다. 이는 높은 안전성을 요구하는 국방 혹은 의료 분야 등에서 사용될 수 있는 방법이다. 아니면, 공개키 기반 구조에 기반하여 통신하는 시점에 키 공유가 이루어지는 경우도 있다. 안전하지 않은 채널을 통한 키 공유는 일반적으로 공개키 기반 구조에 기반하여 설계될 수 있다. 공개키 암호는 대칭키 암호에 비해서 속도가 현저히 느리나, 키와 같이 매우 짧은 데이터를 한번만 처리하면 된다. 키 공유에 따른 부채널 대응 기법 비용이 전체 암호 통신 효율성 및 전력 소모량 측면에서 별 영향을 주지 않는다.
따라서 공개키 기반 구조를 사용하든 하지 않든, 실제 부채널 대응 비용은 비밀 키가 공유된 시점으로부터 대부분이 발생하기 때문에, 본 논문에서 제시된 방식이 크게 실제 암호 통신의 가용성 및 효용성 그리고 안전성에 크게 기여할 것으로 예상된다.
본 발명에서는 압축 함수에 기반한 암호화 및 인증 코드 생성 방법을 제시하고, 현존하는 방식들과 달리 저비용, 고 효율, 고 안전성으로 부채널 공격 대응이 가능함을 보여주었다. 특히, 보호해야 할 XOR 연산의 수는 메시지 크기와 상관 없이 3 개로 고정된 것을 보게 된다. 이는 부채널 대응 기법을 오직 세 개의 XOR 연산만 해도 되기에 구현 시 매우 큰 장점을 지닌다. 블록 암호처럼 아직까지 압축 함수에 대한 표준은 존재하지 않으나, 본 연구 결과는 압축 함수의 표준화의 중요성을 보여주며, 설사 표준화가 아직 진행 중에 없더라도, SHA-3와 같이 표준화될 알고리즘의 기반이 되는 압축 함수를 사용하여 본 문서에서 제시한 암호화 및 인증 코드 생성 방법을 구현할 수도 있다.
저 메모리 환경에서 암호 인증 방법에 관하여
도 88은 본 발명의 실시 예에 따른 암호 모듈을 포함한 장치에 암호인증 방법을 설명하기 위한 블록도이다. 도 88를 참조하면, 장치(10)는 암호 모듈(11)를 포함한다. 장치(10)에는 암호를 필요로하는 모든 장치, 예를 들면, 컴퓨터, 태블릿 PC, 스마트 폰, 모바일 폰, 스마트 카드, 메모리 카드 등이 포함될 수 있다.
암호 모듈(11)은 그 내부에 비밀 키 값과 암호 알고리즘이 있어서 외부의 공격자로부터 안전하게 모듈 내에서 암호화 연산을 수행한다. 암호 모듈(11)은 부채널 공격, 오류 주입 공격 등에 다양한 공격에 안전하도록 설계되어야 한다. 암호 모듈(11)은 면적이 크면 클수록 설계 및 구현 비용이 증가하므로 암호 모듈 안에는 사용 가능한 메모리 크기에 제약이 따른다. 암호 모듈(11)의 구성 및 동작 원리는 도 89에서 설명될 것이다.
도 89는 도 88에 도시된 암호 모듈을 예시적으로 보여주는 블록도이다. 도 89를 이용하여 암호 모듈(11) 내에서 어떻게 암호인증을 수행할 것인가에 대한 기법을 설명한다.
본 발명을 통한 암호인증 기법은 함수 1, 2, 3을 이용하여 입력값으로 Key, Nonce, Associate Data, Plaintext를 입력으로 받아 Ciphertext와 Tag 값을 출력한다. 함수 1은 Key, Nonce, Associate Data를 입력으로 하여, Output 1를 출력한다. 함수 2는 Output 1과 Plaintext를 입력으로 하여 Ciphertext와 Output 2를 출력한다. 함수 3은 Key, Nonce, Associate data를 입력으로 하여 Tag 값을 최종 출력한다.
도 89를 참조하면 Key는 비밀 키값, Nonce는 랜덤하게 생성된 공개된 값, Associate data는 공개된 값이며, 함수 1, 2, 3을 이용하여 Ciphertext (암호문)와 Tag (태그)를 생성한다. 이제 암호문과 태그에 대한 변조 유무를 검증하고 최종 평문(plaintext)를 출력하기 위하여 다음과 같은 과정을 거친다.
저 메모리 환경에서 변조 검증 단계 및 최종 평문 출력 과정
단계 1. 암호 모듈(11)은 장치(10)로부터 Nonce, Associate data, Ciphertext, Tag 값을 입력받는다. 여기에서, 이 값들은 암호 모암호 모듈(11)에 한번에 전달되지 않고, 암호 모듈 안의 작은 메모리에 한 블록씩 전달되어 Tag 값을 계산한다.
단계 2. 암호 모듈에서는 주어진 키 Key를 이용하여 Output 1을 계산하여 저장한다. 그리고 최종 Tag 값이 맞는지 검증한다. Tag 값이 맞지 않으면 주어진 Ciphertext는 변조된 것을 처리하고 그 어떤 평문의 일부도 출력하지 않는다.
단계 3. Tag 값이 맞는 경우 암호 모듈은 Output 1를 암호 모듈 밖으로 출력한다.
단계 4. 암호 모듈 밖에서 Output 1을 이용하여 암호문으로부터 최종 평문을 복호화한다.
도면 88에서, 주어진 방식으로 설계된 암호인증 기법의 안전성을 위하여 요구되는 안전성을 설명하면 다음과 같다.
도면 89에서 보는 바와 같이, 암호문과 태그가 올바를 경우 output 1이 최종 암호 모듈 밖으로 나가기 때문에 output 1과 Nonce, Associate data로부터 비밀키 key가 보호되어야 한다. 이는 key 값을 계산하는 것이 어렵도록 함수 1에 일방향 성질이 요구된다.
도면 90에서 보는 것처럼, 함수 2에는 비밀키 key 값이 없이 수행이 된다. 그리고 output 1이 암호 모듈 밖으로 나가기 때문에, 공격자가 output 2 값이 같도록 하는 서로 다른(Output 1, Plaintext)과 (Output 1', Plaintext')를 찾을 수 있을 경우 (Output 1, Plaintext)에 해당하는 태그 값을 이용하여(Output 1', Plaintext')에 대한 위조가 가능하게 된다.
따라서, 도 91에서 보는 것처럼 함수 2는 충돌저항성 성질을 지녀야 한다. 한편, 암호화 과정과 복호화 과정을 통해 공격자는 Output 2와 Tag, Nonce, Associate data, Plaintext, Ciphertext를 얻게 된다.
도 92에서 보는 것처럼, 공격자로부터 비밀키 Key 정보를 보호하기 위하여, 함수 3에 대해 Ouput 2, Tag, Nonce, Associate data가 주어졌을 경우 Key를 찾는 것이 어려워야 한다. 이는 함수 3에 일방향 성질이 요구됨을 뜻한다.
도 93에서와 같이, Tag 값이 동일하도록 하는 서로 다른 (Key, Nonce, Associate data, Plaintext)와 (Key', Nonce', Associate data', Plaintext')를 얻는 것이 어려워야 한다. 여기서 key는 비밀 값이 아니며, 공격자가 임의의 key, key' 값을 찾기 어렵도록 하는 데에 있다. 이를 통해 함수 3을 이용한 위조 공격를 차단한다.
도 94는 함수 2에 대해, Output 2를 알지 않은 상태에서도 Output 1과 Ciphertext만 알아도 Plaintext를 계산할 수 있어야 함을 보여주는 도면이다. 이는 최종 암호문과 태그가 올바를 경우, output 1의 정보만 가지고 비밀 키에 대한 정보 없이도 암호 모듈 밖에서 암호문에 대한 평문을 복구할 수 있어야 하기 때문이다.
이제부터 본 발명에 따른 실제적인 암호인증 설계 논리 예를 제시한다.
본 발명에 따른 암호 인증 기법 설계 논리 예
본 발명을 기초로 어떻게 메모리가 작은 암호 모듈과 같은 경우에 대해 암호문 변조를 어떻게 검증할 것인가를 보여준다. 도 95에서 P0...Pv=pad(Key, Nonce, Associate data) (여기서 pad는 임의의 패딩기법), M0...Mw는 평문, C0...Cw는 암호문, z0z1...zt은 태그를 나타낸다.
도 95에서 주어진 기법은 본 발명을 기초로 도 96에서 보여준 것과 같이 세가지 부분으로 나누어 볼 수 있다. 그리고 암호문과 태그가 올바를 경우 본 발명에 의해 암호 모듈은 (a0||b0)를 암호 모듈 밖으로 내보내면, (a0||b0)과 주어진 암호문으로부터 원래의 평문을 복구할 수 있게 되므로, 메모리가 작은 환경에서 구현이 가능하게 된다.
동시에 도 96에서 제시된 예는 도 89에서 94까지에서 요구되는 조건을 만족시키는 데 그 이유는 Feedforward 연산 과정으로 말미암아 비밀키 복구가 어렵도록 하는 일방향 성질을 제공하며 도 94에서 보는 것처럼 r+c 비트 크기의 내부 상태 값의 중 마지막 c 비트 값을 외부의 값에 의해 조정이 안되기에 충돌 쌍을 찾기 어렵게 되어 충돌 저항성을 제공한다.
저 메모리 환경에서 Nonce 가 반복되는 것을 막기 위한 조치
실제 암호인증 기법을 구현할 경우, Nonce가 매번 바뀌는 것이 아니라, 반복되는 경우가 발생한다. 이때 Nonce가 재사용되는 것을 막기 위하여 도 97에서 보인 바와 같이 Nonce를 직접 생성하지 않고 함수 4를 이용하여 Key, Associate data, Plaintext로부터 생성한다. 이때 함수 4에 요구되는 성질은 도 98에 보인 바와 같이 함수 4의 출력값 (Nonce로 사용)과 Associate Data, Plaintext로부터 비밀 키 Key를 생성하는 것이 어려워야 하며, 동시에 도 99에서 보인 바와 같이 동일한 출력 값을 갖는 서로 다른 (Key, Associate data, Plaintext)와(Key', Associate data', Plaintext')를 찾는 것이 어려워야 한다.
본 발명에서는 메모리가 작은 환경에서 암호인증 기법을 어떻게 설계할 것인가에 대해 아이디어를 제시하고, 이를 구체화하기 위해서 도 96에서와 같이 실제 예를 보여주었다. 새로운 공격 기법의 출현과 동시에 스마트 디바이스와 같이 새로운 기술의 발달로 말미암아 암호 모듈에 기반한 안전한 암호화 및 인증의 필요성이 점점 중요시 되고 있다. 본 발명에서는 어떻게 암호 모듈과 같이 작은 메모리를 갖는 환경에서 안전하게 암호인증 기법을 구현할 것인가에 대해 설계 논리 및 실제 예를 제시함으로 본 발명의 가용성 및 효용성을 보여 주었다.
난스 해싱을 이용한 치환 함수 기반 암호 인증 기법에 대하여
난스 값에 대한 해쉬 값을 이용하여 부채널 대응 기법 적용 없이 암복호화 및 인증하는 방식에 대해서 설명한다. 본 방식은 난스 값에 대한 동기화가 요구되지 않는다. 도 100에서 도 103까지는 치환 함수 기반 4 가지 방식을 난스 해싱을 이용하여 변경한 방식을 보여준다. 여기서 해쉬를 담당하는 함수Hash가 필요하며, Hash 는 치환 함수나 다른 함수들을 이용하여 쉽게 설계가 가능하다. 최종 출력 값은 (H,C1||…||Ct,T)가 되며 암호 모듈은 해쉬 값 H로부터 대응되는 난스 (N,N’)를 생성한다. 이때 난스를 복구하는 방식은 앞서 설명한 대로, 암호 모듈 내에 난스와 해쉬 값을 미리 보관해 놓고 난스를 복구할 수 있고, 또는 사용될 난스를 미리 두 암호 모듈이 약속하여 사용함으로 난스를 복구할 수 있다. 만약, 난스 값이 사용되서는 안되는 난스 값이라면 암복호화 및 인증을 중단한다.
난스 해싱을 이용한 압축 함수 기반 암호 인증 기법에 대하여
치환 함수 기반의 경우와 비슷한 방식으로 도 104에서 도 107까지 변형할 수 있다.
난스 암호화 또는 난스 해싱 없는 암호 인증 기법에 대하여
도 108에서 110까지는 블록암호, 치환함수, 압축함수 기반 각각의 경우에 대해, 난스 암호화 또는 난스 해싱 없는 경우에 대한 암호 인증 기법의 예를 보여 주고 있다. 두 암호 모듈은 난스 값들이 동기화 되었다고 가정하고 출발한다. 이때, 난스 값의 올바른 사용을 검증하기 위하여, 예를 들어 첫번째 메시지를 고정된 const로 표현하고 있다. 이는, 복호화시 const가 나오지 않을 경우, 난스 값이 틀린 것으로 간주하고, 더 이상 복호화를 진행하지 않는다. 또는, 다른 간단한 방식은 인증코드를 체크함으로 난스 값의 올바른 사용 유무를 파악할 수도 있다.
공격 모델 및 안전성에 관하여
공격 모델은 크게 블랙박스 공격, 그레이박스 공격, 화이트 박스공격이 있다.
블랙박스 공격이란 입출력 정보만 가지고 공격하는 경우를 말하는데, 보통 암호학에서 안전성을 증명할 때 말하는CPA, CCA 공격등이 이에 해당한다. 이 경우는 암호 운영 모드 (예, CBC 모드, OCB 모드 등등)의 안전성은 기반이 되는 블록암호가 의사난수성을 만족할 때 안전성이 수학적으로 증명된 구조이다. 보통 안전성은 입력 평문의 최대 크기, 블록암호 사용 횟수, 키 사이즈, 블록 사이즈, 최대 오라클 쿼리가 가능한 입력 평문의 개수 또는 암호문의 개수 등에 의해, 공격자가 얻는 이득 (Advantage)의 형태로 표현이 된다. 안전성을 위해 보여야 할 것은, 임의의 효율적인 공격자에 대해서 Advantage가 negligible 함을 보이면 된다. 마찬가지 방식으로 여기서 제시한 발명들에 대해 수학적으로 안전성을 증명하는 것은 간단한 일이다.
그레이박스 공격이란, 공격자가 블랙 박스 공격 모델에서 획득할 수 있는 정보 외에 부채널 정보까지 추가적으로 주어지는 경우를 말한다. 이 경우 대표적인 것이 비침투형 공격(non-invasive attack)과 침투형 공격 (semi-invasive attack)이 있다. 비침투형의 대표적인 경우가 전력 분석과 비침투형 전자파분석 공격이 있다. 또한 전압 가변 방식 또는 클럭가변 방식도 이에 해당한다. 이와 같은 비참투형 공격 및 이에 대한 대응이 본 발명 기법을 적용하지 않을 경우, 비용이 가장 많이 들고, 가장 막기 힘든 공격이다. 본 명세서에서 제시한 발명은 비침투형 공격에 대해 안전성을 제공하는 암호 연산에 관한 것이다. 침투형 공격의 예로는 오류 주입(Fault Injection) 공격인데, 이는 동일한 연산이 반복되는 경우에, 정상 출력과 오류 출력을 생성하여 공격하는 기법이다. 대부분의 오류 주입 공격의 아이디어는 정상 출력 값과 오류를 주입한 경우의 출력 값을 이용하다는 데에 있다. 즉, 동일한 입력 값에 대해 최소 두번 이상의 반복 연산이 요구되어야 정산 출력 값과 오류가 주입된 출력 값을 생성할 수 있게 된다. 하지만, 본 논문에서는 암호 연산 정의시, 암호문으로부터 난스 값이 반복 사용되었거나 사용 가능한 난스인지를 먼저 체크한 후 사용한다. 그리고, 새로운 난스 값으로부터 이로부터 일회용 비밀 정보 값들을 생성하여 내부 상태값에 변화를 계속 주기 때문에, 내부에 어떤 연산도 동일한 비밀 정보 값을 이용한 반복된 연산은 존재하지 않는다. 따라서, 본 발명에서 제시한 암호 연산 방법은 오류 주입 공격에 대해 강한 안전성을 제공한다. 만약, 공격자가 연산에 오류를 주었다고 할지라도, 마지막 태크 정보로부터 태그 값이 올바른지에 대한 여부 파악을 통해 오류가 발생했는지에 대한 탐지가 가능하다.
마지막으로 화이트박스 공격 모델의 경우에는 공격자가 모든 내부 상태 값을 아는 경우를 말한다. 화이트 박스 공격 모델을 막는 것은 외부에서 칩 내부를 읽고자 할 경우, 비밀 정보 및 상태 정보가 모두 사라지도록 하면 된다. 본 명세서는 화이트 박스 공격 모델에 대해서 고려하지 않고 있다.
그 밖의 암호화 및 인증 코드 생성 방법 변경에 대하여
기존에 많이 알려진 여러 암호화 및 인증 코드 생성 방법들의 부채널 공격 관점에서의 취약점을 살펴본다. 그리고, 각각을 어떻게 변경해야 부채널 공격에 안전할 수 있는지 지금까지 설명한 기술 사상을 기초로 개선된 방법들을 제시한다.
대표적인 블록 암호 기반 암호 운영 모드로는Electronic codebook (ECB), Cipher-block chaining (CBC), Propagating cipher-block chaining (PCBC), Cipher feedback (CFB), Output feedback (OFB), Counter (CTR)가 있다. 이제 각각에 대해서 부채널 공격에 대한 취약점을 지적하고, 어떻게 변경해야 안전할 수 있는지에 대한 기술 사상을 설명한다.
도 111은 ECB 모드를 보여주는 도면이다. 블록암호 각각에 대해 고정된 키가 사용되고, 블록 암호 입출력 정보가 공격자에게 노출되기 때문에, 쉽게 부채널 공격이 가능하게 된다. 도 112는 부채널 공격에 강한 안전성을 제공하도록 ECB 모드를 변형한 ECB’ 모드이다. 여기서는 난스를 해싱하는 경우만 고려하였다. 앞서 설명했던 난스를 암호화하는 방식을 사용해도 된다. 그리고, 매 블록 암호의 키 값을 난스와 H’ 함수를 이용하여 해싱하므로 매 블록마다 다르게 생성한다. 여기서 H와 H’은 블록암호기반 12 개의 안전한 PGV 방식들을 이용하여 정의될 수 있다. 또한, 도 112에서처럼 키를 매 블록 바꾸는 대신, 고정된 키를 사용하고, 마스크 값을 난스로 부터 정의하여 블록 암호 입출력 정보에 마스킹을 할 수도 있다.
비슷한 방식으로 도 113의 CBC 모드를 도 114의 CBC’으로, 도 115의 PCBC 모드를 도 116의 PCBC’ 모드로, 도 117의 CFB 모드를 도 118의 CFB’ 모드로, 도 119의 OFB모드를 도 120의 OFB’ 모드로, 도 121의 CTR 모드를 도 122의 CTR’ 모드로 부채널 공격에 대한 안전성 강화를 위하여 변형시킬 수 있다.
이번에는 OCB1, OCB2, OCB3를 살펴보자. 도 123, 124, 125는 OCB1, OCB2, OCB3 모드를 보여준다. 여기서 빨간색 박스로 표시한 부분이 부채널 공격에 취약한 부분이다. 즉, 부채널 공격에 의해 키가 노출될 수 있는 취약한 부분인 것이다. 빨간 색 부분을 잘 보면, 블록암호 연산의 입력 또는 출력 값이 공격자에게 노출되는 공격 지점들이다. 따라서, 블록 암호 연산의 입력 또는 출력 정보를 감추기 위하여, 추가적으로 빨간 색 부분에 마스크 값을 블록 암호 연산의 입력 또는 출력 정보에 적용해야 한다. 그리고 난스 값을 보호하기 위하여, 예를 들어, 앞서 설명했던 방식으로 (N,C0=H(N))을 생성하여, C0를 암호문의 첫번째 블록으로 출력하는 방식을 사용할 수 있다. 특히 OCB3의 모드의 경우에 마지막 메시지 블록 크기가 full이냐 아니냐에 따라 처리를 다르게 함을 볼 수 있다. 따라서, full인 경우와 full이 아닌 경우, 마지막 메시지 블록 처리시 마스크 값을 다르게 적용해야 한다. 만약 동일한 마스크 값이 적용된다면, 마지막 메시지 블록이 full이면서 0 비트 값들로 끝나는 경우의 암호문으로부터, 마지막 메시지 블록의 끝의 0 비트 값들이 없앤 새로운 메시지에 대한 암호문을 쉽게 얻게 된다. 또한 OCB3의 경우 Auth 값을 생성할 때, 매블록마다 공개된 상수 값을 마스크 값으로 사용하는데, 이를 비밀 마스크 값들로 바꾸어 적용해야 한다.
도 126은 CBC MAC을 보여준다. CBC MAC에는 난스 값이 적용되지 않기 때문에, 모든 블록 암호 연산에서 비밀 키 값이 노출될 수 있다. 따라서, 앞서 여러 예들에서 보인 것처럼 매번 블록 암호 비밀 값을 바꾸던가, 아니면 블록 암호 입출력 값이 노출되지 않도록 마스킹 과정이 요구된다. 도 127은 마스킹 과정을 적용시킨 경우를 보여준다. CBC MAC 값은 T 으로부터 정의하지만, 앞서 설명한 방식으로 난스 값을 보호하기 위하여, H(N)를 수행하고, 최종 MAC 값으로 C||T 으로 취한다.
도 128은 OMAC을 보여준다. OMAC 역시 CBC MAC 처럼 난스 값이 적용되지 않기 때문에, 모든 블록 암호 연산에서 비밀 키 값이 노출될 수 있다. 따라서, 여러 예들에서 보인 것처럼 매번 블록 암호 비밀 값을 바꾸던가, 아니면 블록 암호 입출력 값이 노출되지 않도록 마스킹 과정이 요구된다. 구체적으로, 도 127에서 설명한 방식으로 OMAC를 변형시키면 된다. 그리고, 마지막 블록암호 입력 값 부분에 고정된 비밀값들인 HL(Cst1) 과HL(Cst2)를 적용하는 대신, 가령 예를 들어, H(Cst1||N)과H(Cst2||N)을 생성하여 (이때, 비밀값 L대신 고정된 상수값을 사용), 마지막 블록암호 입출력 값의 마스크 값들로 활용할 수 있다. 앞서 설명한 방식으로 난스 값을 보호하기 위하여, H(N)를 수행하고, 최종 MAC 값으로 C||T 으로 취한다. 이때 다시 강조하지만, H 입력 값에 난스와 공유키 값이 동시에 들어갈 수 있으며, 난스에 대한 해싱 대신 공유 키를 이용하여 난스를 암호화하는 방식을 취할 수도 있다.
PMAC의 경우를 살펴보자. 도 129를 보면, L이 고정된 값이기 때문에 안전하지 않다. 따라서, L 값을 변형시켜 주어야 한다. 앞에서 설명한 방식과 바찬가지로 (N,H(N))을 생성하고, C=H(N)로 정의한다. 그리고 앞서 보인 방식으로 N을 이용하여 L 값 또는 매 블록마다 서로다른 마스크 값들을 생성하여 블록 암호의 입력 값들을 보호한다. 그리고, 마지막 태그 값 생성시 블록암호의 출력값에 마스크 값을 적용시켜야 한다.
이번엔 HMAC에 대해서 살펴보자. 키를 K, 메시지를 M, T를 태그라고 할 때, T=HMAC(K,M)로 표현된다. 이때, 본 발명의 방식으로 변형할 경우, 예를 들어 다음과 같은 방식으로 변형시킬 수 있다. C=H(N)이고 T=HMAC(N,M)일 때, M에 대한 최종 태그 값으로 C||T로 정의를 내린다.
CCM 모드, GCM, CWC, EAX 암호 인증 모드들의 경우, CTR 모드, OMAC 등을 기반으로 설계된 모드들이다. 따라서, 앞서 제시된 방법으로 CTR 및 OMAC을 변형하여 이들 모드들을 변형해야 한다. 이들 모드들도 마찬가지로, 예를 들어 해싱을 사용할 경우, (N,H(N))을 생성하고, 첫번째 암호문 블록으로C0=H(N)을 놓고, 나중에 C0로부터 사용된 난스 값을 축출하여 암호화 및 복호화를 수행한다. 이때, 난스 값이 사용될 수 없는 값이면, 복호화를 중지한다. 다시 강조하지만, H 입력 값에 난스와 공유키 값이 동시에 들어갈 수 있으며, 난스에 대한 해싱 대신 공유 키를 이용하여 난스를 암호화하는 방식을 취할 수도 있다.
기존 특허 회피를 위한 방안에 관하여
CRI에 제안된 프로토콜 레벨에서의 부채널 공격에 대응하기 위한 기존 특허들은 키를 업데이트 하는 방식에 대해 다루고 있다. CRI 특허들은 비밀 패러미터와 키 Index 패러미터를 어떻게 다룰 것인가에 대해 상세히 나열하고 있다. 여기서는 어떻게 하면 CRI 특허들의 청구항들을 피할 수 있는가에 대한 방안에 대해서 언급한다. 이는 메모리 초기화 상태 정보를 어떻게 시작하는가와 그리고 해쉬 함수의 일방향 함수 사용의 중요성과 관련되어 있다. 그리고, 메모리 상태 정보로부터 비밀 패러미터인 공유 키 정보를 알 수 없도록 해야 한다.
본 발명에서 제시하는 설계 방식들은 두 기기가 키를 공유한 후, 공유 키로부터 난스열 생성 및 이들의 일방향 해쉬 값 열을 생성한다. 그리고 추후 새로운 난스열을 생성하기 위한 추가적인 비밀 상태 값을 저장해 놓는다. 여기서 말하는 비밀 상태값은 난스열을 생성한 이후에 발생하는 비밀 상태 값으로, 이 비밀 상태 값은 나중에 추가 난스열을 만들 때 사용하는 값이다. 그러면, 기존 특허, 특히 위의 청구항들을 회피하기 위하여, 본 발명에서는 공유키를 삭제한다. 그리고, 각 난스로부터 다른 난스를 생성할 수 없어야 하고, 또한 상기 비밀 상태 값으로부터 이전의 난스 값, 그리고 공유 키 값을 생성할 수 없어야 한다. 이러한 난스 생성 예는 이미 본 명세서에서 보였다.
즉, 두 기기 암호 모듈 내의 메모리 상태는 공유 키는 없는 상태에서 난스열, 그의 해쉬값 열, 그리고, 추후 사용할 비밀 상태 값으로 초기화되는 것이다.
첫째 기기가 암호 연산을 수행하고 두번째 기기와 암호 통신을 수행할 때, 첫째 기기는 메모리 상에 올라가 있는 난스 값 중 하나의 난스 값을 선택하여 이를 세션 키로 암호 연산을 수행한다. 그리고, 암호 연산 결과 값을 생성하고, 최종적으로 두 번째 기기에게 그 결과 값과 선택된 난스에 대한 해쉬 값을 보낸다. 그리고, 첫번째 기기는 사용된 난스와 그의 해쉬 값을 메모리에서 삭제하므로, 향후 난스 재사용을 방지한다. 두번째 기기는 결과 값 및 난스의 해쉬 값을 받은 후, 해쉬 값으로부터 해당되는 난스 값을 이용하여, 결과 값에 암호 연산을 수행한다. 이때, 두번째 기기는 난스 값이 메모리에 있을 때에만 암호 연산을 수행하고, 만약 해당 난스 값이 메모리에 없으면 결과 값에 대한 처리 수행하지 않고, 에러를 출력한다. 그리고, 난스 값이 메모리에 있으면, 결과 값을 처리한 후, 해당 난스와 그의 해쉬 값은 메모리에서 삭제하므로, 향후 재사용되는 것을 방지한다.
기존의 키 Index 기법 기반 방식에 관하여
지금까지 공유 키로부터 난스 열과 이들의 해쉬 값들을 어떻게 생성하여 암호화 및 인증 코드 생성, 그리고 복호화 방법에 대해서 논했다. 이번에는 기존의 키index 기법 방식에 기반하여 설계하는 방식 또한 제안한다. 그리고 이 둘 사이의 장단점을 논하고자 한다.
기존에 알려진 부채널 공격에 강한 안전성 제공하는 키 Index 기반 방식은 다음과 같이 동작한다. 먼저 두 개의 함수 f_0와 f_1이 주어졌을 때, 고정된 키 K와 t 비트의 키 Index (=i_1||i_2||…||i_t, 여기서 i_j 각각은 1 비트 값으로 0 또는 1임)를 입력으로 받아, 난스 또는 세션 키 K_index=f_{i_t}(f_{i_{t-1}}(…..f_{i_1}(K)….))를 정의한다. 이때, 키 Index 대신 카운터라고 말을 해도 된다. 왜냐하면, 키 Index는 랜덤할 필요 없고, 다만 매번 다른 값이기만 하면 족하기 때문이다. Index 값의 비트 정보에 따라 f_0 또는 f_1를 선택하게 된다. 이렇게 난스 또는 세션 키를 키 Index또는 카운터를 이용하여 생성한 후, 일회용 난스 또는 세션 키로 암호화 및 인증 코드 생성, 그리고 복호화를 시도하게 된다. 이때, 앞서 설명했던 난스에 대한 해쉬 값 대신, 바로 키 Index 값 또는 카운터가 들어가게 된다.
도 130은 앞서 설명했던 난스 열과 해쉬 값에 기반한 방식을 어떻게하면 키 Index 또는 카운터에 기반한 방식으로 변경시킬 수 있을 것인가에 대한 예를 보여준다. 도 130을 보면, K는 고정된 공유 키 값이고, 키 K와 카운터 ctr (=ctr_1||ctr_2||…||ctr_t, 여기서 ctr_j 각각은 1 비트 값으로 0 또는 1임)로부터 앞서 설명한 방식으로 N=f_{ctr_t}(f_{ctr_{t-1}}(…..f_{ctr_1}(K)….))을 얻은 후, N을 이용하여 암호화 연산을 수행한다. 이때, 최종 출력값은 ctr||C1||C2…. 가 되며, ctr||C1||C2….를 받은 암호 모듈은 ctr이 사용해도 되는 경우, ctr로부터 N을 생성하고, N을 이용하여 복호화를 시도하게 된다. 도 130과 동일한 방식으로 다른 방식들도 쉽게 변경이 가능하다.
이런 식으로 ctr를 이용한 경우, 세 가지 장점을 지닌다. 첫째, 난스 열을 저장해 놓을 필요가 없고, 매번 난스가 필요할 때마다 키 Index 또는 카운터를 이용하여 고정키로부터 난스를 효율적으로 생성할 수 있다는 장점이 있다. 둘째, 난스가 기존에 쓰였는지 search를 통해서 파악하던 데서, 키 Index 또는 카운터 값이 반복되지 않았는가만 체크하면 된다. 앞서 난스의 경우는 각각의 해쉬 값들이 매번 랜덤한 형태를 갖지만, 카운터나 키 Index의 경우는 1씩 증가시켜 나갈 수 있어서, 현재 사용하고 있는 카운터 또는 키 Index 값만을 저장하여 유지하고 있기만 하면 된다. 만약, 카운터 값 또는 키 Index 값이 최근에 사용한 값보다 같거나 작으면, 암호화 또는 복호화를 진행하지 않는다. 셋째, 카운터 또는 키 Index 기반한 방식의 경우, 메모리가 부족한 암호 모듈에서는 효과적이다.
하지만, 매번 난스 또는 세션 키 값을 생성하기 위하여, f0 또는 f1 함수를 키 Index 또는 카운터 비트 크기 만큼 추가 연산을 해야 하기 때문에, 에너지 사용이 증가하게 된다. 에너지 사용의 증가는 효율성이 감소한다는 말과 연결된다. 따라서, 에너지 소비에 민감하거나, 효율성이 중시되는 환경에서는 키 Index 기반 대신 본 발명에서 앞서 설명했던, 난스 열과 이들의 해쉬 값 열을 저장하는 방식을 사용해야 한다.
기존의 부채널 공격에 강한 안전성을 제공하는 기법에 대하여
도 131은 CRI에서 제안한 부채널 공격에 강한 안전성을 제공하는 암호 인증 모드를 보여준다. 도 131에서 정의된 모드는 매 블록의 해쉬 값을 생성하여 변경 여부에 대한 인증을 마지막 블록에서 시작하여 첫번째 블록까지 거꾸로 수행한다는 특징이 있다. 이로 말미암아 메시지 ID 또는 메시지 카운터 값을 유지하지 않아도 되는 장점이 있다. 그리고, 암호화된 데이타를 보관할 때 장점이 있다.
하지만, 이를 통신에 적용하기에는 다음과 같이 효율성 및 에너지 소비 관점에서 두 가지 문제점이 발생한다. 첫째, 암호화시 마지막 블록에 대한 암호화가 끝나야 인증이 시작되는 관계로, 속도가 최소 두 배 이상 느려진다. 동시에, 암호화되는 메시지 값이 길어지면 길어질수록 통신의 효율성은 더욱 떨어지게 된다. 둘째, 매 블록 인증 과정을 거치는 관계로, 연산량이 증가한다. 셋째, 세션 키 생성 과정 및 초기 인증 값 V를 생성하는 연산량이 크다. 이처럼, 위의 모드는 암호 통신을 하는 데에 적합하지 않은 모드임을 알 수 있다.
반면, 본 발명에서 제시한 방식들은 데이타를 저장하고 복호화하는 용도가 아닌, 통신의 암호화, 인증 및 복호화를 목적으로 설계되었다. 따라서, 도 131의 CRI의 모드와 달리 속도도 느려지지 않을 뿐 아니라, 저 메모리 환경에서 한번만 인증만 하는 식의 방식 또한 앞서 보였다. 통신에서는 통신의 효율성 및 에너지 소비량을 낮추는 것이 매우 중요한 관계로, CRI 모드 보다 본 발명에서 제시한 방식이 암호 통신에 적합함을 알 수 있다.
본 발명에서 제시하는 일반적인 암호 통신 기법 1
두 암호 모듈이 통신을 수행할 때, 본 발명에서 제시하는 암호 통신 방법은 다음과 같은 복호화 또는 MAC 값 검증을 포함하는 과정을 포함한다. (이때, 각 세션 키 또는 일회용 난스를 업데이트 하여 암호 연산을 수행할 때, 부채널 공격에 유용한 정보가 이들의 비밀 정보로부터 노출되지 않도록 암호 연산 및 업데이트를 수행해는 과정을 포함한다.)
첫째, 복화화 또는 MAC 값 검증을 위한 암호 연산을 수행하는 데 있어, 사용된 비밀 정보 (예를 들어 비밀 난스 또는 비밀 세션 키)의 일부 또는 전체 값이 반복 사용되었는지에 대한 여부를 먼저 파악한다. 만약, 반복 사용된 비밀 정보 전체 또는 일부가 있을 경우, 암호 연산 방식에 따라 복호화 또는 MAC 값 검증 위한 암호 연산을 중단시킨다.
둘째, 위에서 비밀 정보의 일부 또는 전체의 반복 사용 여부 체크 단계를 통과하면, 복호화 또는 MAC 값 검증 위한 암호 연산을 수행한다.
본 발명에서 제시하는 일반적인 암호 통신 기법 2
첫째, 세션 키 또는 일회용 비밀 난스 값을 생성할 때, 트리 기반이 아닌 순차 체인 방식으로 세션 키 또는 일회용 난스 값을 업데이트하여 생성한다. (순차 처리는 트리 기반에 비해 메모리 사용 비용으로 구현 효율성의 증가 및 에너지 소비를 줄일 수 있다.)
둘째, 각 세션 키 또는 일회용 난스를 업데이트 하여 암호 연산을 수행할 때, 이들의 비밀 정보가 부채널 공격에 유용한 정보가 노출되지 않도록 암호 연산 및 업데이트를 수행한다.
트리 기반과 순차 처리 기반 방식의 장 단점
앞서 CRI에서 제시한 트리 기반 세션 키 생성 방식과 본 발명에서 제시한 순차 처리 기반 키 또는 난스 생성 방식에 대해서 언급하였다. 각각의 생성 기법은 나름 대로의 장점이 있다. 트리 기반 방식은 메모리 사용량을 줄여주는 반면, 트리의 깊이에 따라 처리량이 늘어나게 된다. 순차 처리는 메모리를 사용하여 처리 속도를 높일 수 있다. 반면, 안전성 측면에서 볼 때, 트리 기반 방식의 경우, 고정된 키 값을 반복사용하여 트리를 형성하기 때문에, template 공격에 취약할 수 있는 여지가 있다. 반면, 순차 처리 기반은 반복되는 입력 값이 적기 때문에 template 공격에 강한 안전성을 제공한다.
따라서, CRI에서 제시한 트리 기반 키 생성 방식와 본 발명에서 제시한 순차 처리 방식을 다음과 같이 섞어서 고려할 수 있다. 먼저 순차 처리로 생성된 난스열과 각 난스의 대한 해쉬 값 열(이때, 해쉬 값 생성시 공유 키 또한 사용할 수 있음)을 이용한다. 이때 난스 열과 각 난스에 대한 해쉬 값 열은 두 기기가 공유를 하고 있는 상태이다. 그리고 각 난스는 트리의 루트 값이 된다.
그리고, 암호화 또는 인증을 수행하고자 할 경우, 세션 키를 생성하기 위하여, 첫째 기기는 하나의 난스를 택해 그의 해쉬 값을 상대방에게 보낼 준비를 한다. 그리고, 그리고 키 인덱스를 선택하여, 선택된 난스를 루트로 하여 세션 키를 결정하고, 세션 키를 이용하여 암호 연산을 수행한다. 그리고 암호 연산 결과 값과 해쉬 값, 그리고 키 인덱스 값을 둘째 기기에게 보내게 된다.
둘째 기기는 이들 값을 받으면, 받은 해쉬 값이 난스 열과 해쉬 값 열에 있는지 파악하고, 만약 해당 난스 값이 있는지 파악하고, 그 난스가 사용해도 되는 난스이면 주어진 키 인덱스를 이용하여 복호화 또는 MAC 검증 과정을 수행한다.
난스 값과 그의 해쉬 값 쌍들 생성 방법에 대하여
지금까지 효율적으로 난스 값 및 그의 해쉬 값 쌍 열을 생성하는 방법에 대해서 제시하였다. 그러나 일반적으로 난스 열을 생성할 때, 순차 처리 방식이 아닌, 임의의 미리 정의된 방법으로 생성할 수도 있다. 단, 처리시 부채널 공격에 강한 안전성을 제공하는 방식을 사용해야 한다는 점이다.
본 발명의 활용 및 전망에 관하여
사물인터넷(Internet of Things : IOT) 시장은 한국의 경우 지난해 2.3조원 규모에서 오는 2016년에는 4.8조원으로 2배 이상 확대되고, 전 세계적으로는 오는 2016년 3,700억 달러까지 성장할 것으로 전망된다. 현재 50 억개의 기기들이 연결되어 있는데, IDC는 2020년까지 약 2000억 개의 기기들이 인터넷에 연결될 것으로 전망하고 있다. 하지만, 이를 뒷받침해 줄만한 보안 기술이 실질적으로 없는 상황이라는 데에 문제가 있다.
또한, 2010년 Frost & Sullivan analysis의 분석에 따르면 2010 M2M의 스마트센서의 숫자를 나타낼 수 있는 M2M Sim 카드의 판매가 ‘10년 27백만개에서’ 17년 161백만개로 성장할 것으로 전망된다. 구체적으로 생활가전, 산업, 응급 및 안전, 소매 및 금융, 기계, 헬스케어, 자동차 등의 분야에서 M2M 보안이 중시되어 이에 대한 보안 대책이 요구된다.
이뿐 아니라, 국방 및 정부 기관 등 보안에 매우 민감한 분야에서의 안전성을 극대화하기 위한 보안 기술 개발이 요구되고 있다.
또한, 모든 사물이 지능화되고 네트워크화되어 사람과 사람, 사물과 사람, 나아가 사물과 사물 간에 의사소통이 가능한 사회인 유비쿼터스 사회에서의 보안은 필수 불가결하다.
본 발명에서 제시한 암호화 및 인증 방식에 대한 발명 사상은 저비용으로 높은 안전성을 요구하는 어디 분야든지 사용이 가능하다는 특징을 지닌다. 그리고 저비용으로 쉽게 구현이 가능하다는 장점이 있다. 무엇보다 구현 비용 및 에너지 비용에 민감한 부분에서의 활용도가 매우 크다. 이러한 이유 때문에 본 발명의 기술 사상 및 구체적인 실시 예들은 사물인터넷, M2M, 국방, 의료, 유비쿼터스 사회 등의 안전성을 높이는 데에 크게 기여할 것으로 기대된다.
또한, 본 발명 사상 및 실시 예들을 기초로, 다양한 응용 분야에 적합하도록 안전한 알고리즘, 프로토콜, 제품 개발 등을 위한 수많은 개량 방식 및 특허 개발 및 새로운 제품 및 시장 창출이 가능할 것으로 전망된다.
이상으로, 앞으로의 미래를 바라볼 때, 본 발명의 활용 및 전망은 매우 밝다.
한편, 상술 된 본 발명의 내용 및 에들은 발명을 실시하기 위한 구체적인 실시 예들에 불과하다. 본 발명은 구체적이고 실제로 이용할 수 있는 수단 자체뿐 아니라, 장차 기술로 활용할 수 있는 추상적이고 개념적인 아이디어인 기술적 사상을 포함할 것이다.
1: 기반 암호함수
2: 단순 외부 연산
10: 장치(device)
11: 암호 모듈
100, 200, 300, 400: 암호 함수

Claims (1)

  1. 암호화 시스템의 암호 연산 방법에 있어서:
    제 1 기반 암호 함수에서 암호 연산을 수행하는 단계;
    상기 제 1 기반 암호 함수에서 연산된 값과 제 1 부가적인 정보를 이용하여 제 1 부채널 방지 외부 연산을 수행하는 단계;
    상기 1 부채널 방지 외부 연산 과정으로부터 산출된 값과 제 2 부가적인 정보를 이용하여 제 2 부채널 방지 연산을 수행하는 단계; 및
    제 2 암호함수에서 상기 제 2 부채널 방지 연산된 값을 이용하여 상기 기반 암호 함수에서 암호 연산을 수행하는 단계를 포함하는 암호 연산 방법.
KR1020140024807A 2014-03-03 2014-03-03 암호화 시스템 및 그것의 암호 통신 방법 KR20150103394A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140024807A KR20150103394A (ko) 2014-03-03 2014-03-03 암호화 시스템 및 그것의 암호 통신 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140024807A KR20150103394A (ko) 2014-03-03 2014-03-03 암호화 시스템 및 그것의 암호 통신 방법

Publications (1)

Publication Number Publication Date
KR20150103394A true KR20150103394A (ko) 2015-09-11

Family

ID=54243594

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140024807A KR20150103394A (ko) 2014-03-03 2014-03-03 암호화 시스템 및 그것의 암호 통신 방법

Country Status (1)

Country Link
KR (1) KR20150103394A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3061384A1 (fr) * 2016-12-22 2018-06-29 Oberthur Technologies Procede de traitement de donnees
CN114025346A (zh) * 2021-10-12 2022-02-08 杭州趣链科技有限公司 一种移动自设网络间数据安全有效的数据传输方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3061384A1 (fr) * 2016-12-22 2018-06-29 Oberthur Technologies Procede de traitement de donnees
CN114025346A (zh) * 2021-10-12 2022-02-08 杭州趣链科技有限公司 一种移动自设网络间数据安全有效的数据传输方法
CN114025346B (zh) * 2021-10-12 2024-03-29 杭州趣链科技有限公司 一种移动自设网络间数据安全有效的数据传输方法

Similar Documents

Publication Publication Date Title
Dang Recommendation for applications using approved hash algorithms
Buttyan et al. Security and cooperation in wireless networks: thwarting malicious and selfish behavior in the age of ubiquitous computing
US9172529B2 (en) Hybrid encryption schemes
Saraf et al. Text and image encryption decryption using advanced encryption standard
US9497021B2 (en) Device for generating a message authentication code for authenticating a message
WO2016058404A1 (zh) 基于预共享密钥的实体鉴别方法及装置
Toorani et al. A secure cryptosystem based on affine transformation
CN109951276B (zh) 基于tpm的嵌入式设备远程身份认证方法
CN110601822A (zh) 一种基于量子保密通信技术的加密盲签名方法
CN114844728B (zh) 序列化数据安全通信方法及大数据平台
Wu et al. JAMBU lightweight authenticated encryption mode and AES-JAMBU
Schmidbauer et al. Challenging channels: Encrypted covert channels within challenge-response authentication
Paar et al. Message authentication codes (MACs)
Hwang et al. Robust stream‐cipher mode of authenticated encryption for secure communication in wireless sensor network
CN108599922B (zh) 新型含密钥消息完整性认证码的生成方法
EP2571192A1 (en) Hybrid encryption schemes
Riyadi et al. The Dynamic Symmetric Four-Key-Generators System for Securing Data Transmission in the Industrial Control System.
KR20150103394A (ko) 암호화 시스템 및 그것의 암호 통신 방법
CN113784342B (zh) 一种基于物联网终端的加密通讯方法及系统
Yap et al. Security analysis of GCM for communication
KR20150098955A (ko) 암호화 시스템 및 그것의 암호 통신 방법
US11838424B2 (en) Authenticated encryption apparatus with initialization-vector misuse resistance and method therefor
Kunz-Jacques et al. Using hash-based signatures to bootstrap quantum key distribution
KR20150097955A (ko) 암호화 시스템 및 그것의 암호 통신 방법
KR101316605B1 (ko) N―box를 이용한 암호 알고리즘의 일회용 패스워드(otp) 생성방법.

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination