"스트림 암호"의 두 판 사이의 차이
잔글 |
잔글 |
||
(다른 사용자 한 명의 중간 판 5개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | [[파일:스트림 암호.png| | + | [[파일:스트림 암호.png|400픽셀|섬네일|오른쪽|스트림 암호: 암호키는 보통 컴퓨터가 생성한 의사난수열이다.]] |
− | [[파일:RC4스트림 암호의 구조.png| | + | [[파일:RC4스트림 암호의 구조.png|400픽셀|섬네일|오른쪽|RC4스트림 암호의 구조]] |
+ | |||
'''스트림 암호'''(stream cipher)는 이진 수열로 변환된 평문을 비트 단위로 암호화하는 암호이다. 스트림 암호(stream cipher)는 대칭 키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻는다. | '''스트림 암호'''(stream cipher)는 이진 수열로 변환된 평문을 비트 단위로 암호화하는 암호이다. 스트림 암호(stream cipher)는 대칭 키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻는다. | ||
30번째 줄: | 31번째 줄: | ||
자기 동기 스트림 암호의 한 예는 블록 암호에 CFB 운용 모드를 결합한 것이다. | 자기 동기 스트림 암호의 한 예는 블록 암호에 CFB 운용 모드를 결합한 것이다. | ||
+ | |||
+ | == 블록암호와 비교 == | ||
+ | [[파일:스트림 암호와 블록 암호의 차이점.png|썸네일|800픽셀|가운데|스트림 암호와 블랙암호의 차이점]] | ||
== 활용 == | == 활용 == | ||
− | 스트림 암호는 [[블록 암호]]만큼 일반적으로 사용되지 않는다. | + | 스트림 암호는 [[블록 암호]]만큼 일반적으로 사용되지 않는다. 사례로는 LFSR, MUX generator, RC4, A5/1, A5/2, A5/3 등이 있다. 가장 유명한 알고리즘은 Vernam cipher(One time Pad)가 있다. |
=== A5/1 === | === A5/1 === | ||
* 시프트 레지스터를 기반으로 사용 | * 시프트 레지스터를 기반으로 사용 | ||
* GSM 휴대폰 체계에 사용 | * GSM 휴대폰 체계에 사용 | ||
− | [[파일:스트림 암호 사례 1.jpg|썸네일| | + | [[파일:스트림 암호 사례 1.jpg|썸네일|800픽셀|가운데|'''A5/1''']] |
A5/1은 3개의 시프트레지스터로 구성되어 있으며 64bit길이의 키를 가지고 있다. | A5/1은 3개의 시프트레지스터로 구성되어 있으며 64bit길이의 키를 가지고 있다. | ||
− | [[파일:사례1-2.png|썸네일| | + | [[파일:사례1-2.png|썸네일|800픽셀|가운데|'''A5/1''']] |
64bit를 각각의 x(18), y(21), z(22)로 나눈다. 각각의 값은 하나의 비트이며 키는 레지스터의 초기값으로 사용된다. 각 레지스터는 빨간색으로 표시된 값에 따라서 step을 진행하거나 진행하지 않는다. 키스트림 비트는 레지스터 우측의 bit XOR이다. | 64bit를 각각의 x(18), y(21), z(22)로 나눈다. 각각의 값은 하나의 비트이며 키는 레지스터의 초기값으로 사용된다. 각 레지스터는 빨간색으로 표시된 값에 따라서 step을 진행하거나 진행하지 않는다. 키스트림 비트는 레지스터 우측의 bit XOR이다. | ||
− | [[파일:사례1-3.png|썸네일| | + | [[파일:사례1-3.png|썸네일|800픽셀|가운데|'''A5/1''']] |
빨간색 숫자로 표시된 곳은 XOR 연산을 수행할지 말지를 결정하는 Clocking라고 하며 연산된 결과는 천번째 비트로 표시한다. 2개 이상의 Clocking bit가 1이라면 값을 갖는 시프트 레지스터만 XOR을 수행하고 0이면 0의 값을 갖는 시프트 레지스터만 XOR을 수행한다. | 빨간색 숫자로 표시된 곳은 XOR 연산을 수행할지 말지를 결정하는 Clocking라고 하며 연산된 결과는 천번째 비트로 표시한다. 2개 이상의 Clocking bit가 1이라면 값을 갖는 시프트 레지스터만 XOR을 수행하고 0이면 0의 값을 갖는 시프트 레지스터만 XOR을 수행한다. | ||
50번째 줄: | 54번째 줄: | ||
* 각 단계에서 현재 룩업 테이블 요소들을 교환/테이블에서 키스트림 바이트를 선정 | * 각 단계에서 현재 룩업 테이블 요소들을 교환/테이블에서 키스트림 바이트를 선정 | ||
* RC4의 각 단계는 한 Byte을 생산하여 S/W에서 효율적(A5/1의 각 단계는 1bit를 생산-H/W의 효율)<ref>CODEHELPER, 〈[https://blog.naver.com/jsky10503/221258852189 스트림 암호(Stream Cipher)]〉, 《네이버블로그》, 2018-04-22</ref> | * RC4의 각 단계는 한 Byte을 생산하여 S/W에서 효율적(A5/1의 각 단계는 1bit를 생산-H/W의 효율)<ref>CODEHELPER, 〈[https://blog.naver.com/jsky10503/221258852189 스트림 암호(Stream Cipher)]〉, 《네이버블로그》, 2018-04-22</ref> | ||
− | [[파일:RC4.png|썸네일|800픽셀|가운데|'''RC4''']] | + | |
+ | [[파일:RC4.png|썸네일|800픽셀|가운데|'''RC4''']] | ||
+ | |||
+ | {{각주}} | ||
== 참고자료 == | == 참고자료 == | ||
58번째 줄: | 65번째 줄: | ||
== 같이 보기 == | == 같이 보기 == | ||
− | * [[ | + | * [[블록암호]] |
+ | * [[배타적 논리합]] | ||
{{암호 알고리즘|검토 필요}} | {{암호 알고리즘|검토 필요}} |
2020년 1월 9일 (목) 09:56 기준 최신판
스트림 암호(stream cipher)는 이진 수열로 변환된 평문을 비트 단위로 암호화하는 암호이다. 스트림 암호(stream cipher)는 대칭 키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻는다.
스트림 암호는 일회용 난수표(OTP)를 유사난수로 대체한 것으로 볼 수 있다.
스트림 암호는 하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선 통신 등의 환경에 주로 사용된다. 대표적으로 RC4가 널리 사용되며, 이외에도 A5/1, A5/2 등의 알고리즘이 존재한다.
개요[편집]
스트림 암호는 블록 단위로 암호화·복호화되는 블록암호와는 달리 이진화된 평문 스트림과 이진 키스트림의 배타적 논리합(XOR) 연산으로 암호문을 생성하는 방식이다. 이러한 스트림 암호는 키스트림이 평문과 관계없이 생성되어 동기식으로 사용해야만 하는 동기식 스트림 암호, 키스트림이 평문 혹은 암호문의 함수관계에 의해 생성되기 때문에 복호화 시 동기가 흐트러졌더라도 스스로 동기화가 이루어져서 복호화가 가능한 자기 동기식 스트림 암호가 있다.
1970년대부터 유럽을 중심으로 발달한 스트림 암호는 주기, 선형복잡도 등 안전성과 관련된 수학적 분석이 가능하고, 알고리즘 구현이 쉬워 군사 및 외교용으로 많이 사용되고 있다. 또한 구현 여건이 제약되는 이동통신 환경에서도 구현이 용이하여 이동통신 등의 무선데이터 보호에 많이 사용된다.
종류[편집]
스트림 암호의 안정성은 키스트림이 어떻게 생성되는지에 따라 전적으로 결정된다.
스트림 암호의 난수열을 암호화할 입력값과 독립적으로 생성하는 경우를 동기식(synchronous) 스트림 암호로 부른다. 반대로 입력값이 난수열 생성에 영향을 끼치는 경우 비동기식(asynchronous) 혹은 자기 동기(self-synchronizing) 스트림 암호로 부른다.
동기식 스트림 암호[편집]
동기식 스트림 암호는 난수열을 생성하기 위해 내부 상태(internal state)를 유지하며, 이전 내부 상태에서 새로운 내부 상태와 유사난수를 얻는다. 문자열의 암호화 및 복호화는 생성된 유사난수열과 입력값을 XOR하는 방식으로 이루어진다.
동기식 스트림 암호에서는 암호화 및 복호화할 문자열에서 특정 위치 비트를 변경할 경우 암호화된 결과에서도 같은 위치 비트가 변경되며, 다른 위치의 비트는 변경되지 않는다. 따라서 암호화 문자열을 전송할 시에 특정 비트가 다른 값으로 손상되었어도 복호화 시 다른 비트에는 영향을 미치지 않는다. 하지만 전송 오류에서 비트가 사라지거나 잘못된 비트가 추가되는 경우 오류가 난 시점 이후의 복호화가 실패하게 되며, 따라서 전송 시에 동기화(synchronize)가 필요하다.
또한, 같은 암호화 키로 여러 입력값을 사용할 수 있으면 이를 이용한 암호공격(cryptanalysis)이 가능하다.
동기식 스트림 암호의 한 예는 RC4가 있다.
자기 동기 스트림 암호[편집]
자기 동기 스트림 암호는 난수열을 생성할 때 암호화 키와 함께 이전에 암호화된 문자열 일부를 사용한다.[1] 이 암호의 내부 상태는 이전 내부 상태에 의존하지 않는다. 따라서 암호화 문자열을 전송할 시에 일부 비트가 값이 바뀌거나, 혹은 비트가 사라지고 추가되는 오류가 발생하여도, 일부분만이 복호화에 실패하며 그 이후에는 다시 정상적인 복호화 값을 얻을 수 있는 자기 동기성을 가진다.
자기 동기 스트림 암호의 한 예는 블록 암호에 CFB 운용 모드를 결합한 것이다.
블록암호와 비교[편집]
활용[편집]
스트림 암호는 블록 암호만큼 일반적으로 사용되지 않는다. 사례로는 LFSR, MUX generator, RC4, A5/1, A5/2, A5/3 등이 있다. 가장 유명한 알고리즘은 Vernam cipher(One time Pad)가 있다.
A5/1[편집]
- 시프트 레지스터를 기반으로 사용
- GSM 휴대폰 체계에 사용
A5/1은 3개의 시프트레지스터로 구성되어 있으며 64bit길이의 키를 가지고 있다.
64bit를 각각의 x(18), y(21), z(22)로 나눈다. 각각의 값은 하나의 비트이며 키는 레지스터의 초기값으로 사용된다. 각 레지스터는 빨간색으로 표시된 값에 따라서 step을 진행하거나 진행하지 않는다. 키스트림 비트는 레지스터 우측의 bit XOR이다.
빨간색 숫자로 표시된 곳은 XOR 연산을 수행할지 말지를 결정하는 Clocking라고 하며 연산된 결과는 천번째 비트로 표시한다. 2개 이상의 Clocking bit가 1이라면 값을 갖는 시프트 레지스터만 XOR을 수행하고 0이면 0의 값을 갖는 시프트 레지스터만 XOR을 수행한다.
RC4[편집]
- 변경되는 룩업 테이블을 기반으로 사용
- 다양한 분야에서 이용되고 있음
- 테이블은 항상 0,1,...2555의 어떤 순열을 포함
- 키를 이용하여 순열을 초기화
- 각 단계에서 현재 룩업 테이블 요소들을 교환/테이블에서 키스트림 바이트를 선정
- RC4의 각 단계는 한 Byte을 생산하여 S/W에서 효율적(A5/1의 각 단계는 1bit를 생산-H/W의 효율)[1]
각주[편집]
- ↑ CODEHELPER, 〈스트림 암호(Stream Cipher)〉, 《네이버블로그》, 2018-04-22
참고자료[편집]
- 〈스트림 암호〉, 《위키백과》
- 〈스트림 암호〉, 《네이버지식백과》
- CODEHELPER, 〈스트림 암호(Stream Cipher)〉, 《네이버블로그》, 2018-04-22
같이 보기[편집]