스트림 암호
Stream cipher스트림 암호는 플레인텍스트 숫자가 의사난수 암호 디짓스트림(키스트림)과 조합되는 대칭 키 암호입니다.스트림 암호에서는 각 평문 숫자를 키스트림의 대응하는 숫자와 함께 1개씩 암호화하여 암호문 스트림의 숫자를 부여한다.각 디짓의 암호화가 암호의 현재 상태에 따라 다르기 때문에 상태 암호라고도 합니다.실제로 숫자는 일반적으로 비트이며 결합 연산은 배타적 논리합(XOR)입니다.
의사랜덤 키 스트림은 일반적으로 디지털시프트 레지스터를 사용하여 랜덤 시드 값에서 시리얼로 생성됩니다.시드 값은 암호문 스트림을 복호화하기 위한 암호 키 역할을 합니다.스트림 암호는 블록 암호와 대칭 암호에 대한 다른 접근 방식을 나타냅니다.블록 암호는 고정적이고 변하지 않는 변환으로 큰 자릿수 블록에서 작동합니다.이 구별이 항상 명확한 것은 아닙니다.일부 동작 모드에서는 블록 암호 프리미티브가 스트림 암호로서 효과적으로 동작하도록 사용됩니다.스트림 암호는 일반적으로 블록 암호보다 더 빠른 속도로 실행되며 하드웨어 복잡성이 줄어듭니다.그러나 스트림 암호는 동일한 시작 상태(시드)가 두 번 사용되는 등 보안 침해에 취약할 수 있습니다(스트림 암호 공격 참조).
일회용 패드에서 영감을 얻을 수 없음
스트림 암호는 증명된 unbreakable 암호인 One-time pad(OTP; 원타임패드)의 액션을 근사한 것으로 볼 수 있습니다.원타임 패드는 완전히 랜덤한 자릿수의 키 스트림을 사용합니다.키 스트림은 한 번에 하나씩 일반 텍스트 숫자와 조합되어 암호문을 형성합니다.이 시스템은 Claude E에 의해 안전하다는 것이 증명되었다. 1949년에 [citation needed]섀넌.단, 키 스트림은 적어도 일반 텍스트와 같은 길이로 완전히 랜덤으로 생성되어야 하며 여러 번 사용할 수 없습니다.이로 인해 많은 실용적인 응용 프로그램에서 시스템을 구현하기가 번거로워졌고, 그 결과 가장 중요한 응용 프로그램을 제외하고는 원타임 패드가 널리 사용되지 않았습니다.이러한 애플리케이션에서는 키 생성, 배포 및 관리가 매우 중요합니다.
스트림 암호는 128비트 등 훨씬 작고 편리한 키를 사용합니다.이 키를 기반으로 원타임패드와 같은 방법으로 플레인텍스트 디짓과 조합할 수 있는 의사랜덤키 스트림을 생성합니다.그러나 이것은 대가가 따른다.현재 키 스트림은 의사 난수이므로 실제로는 랜덤하지 않습니다.원타임 패드와 관련된 보안 증명은 더 이상 사용할 수 없습니다.스트림 암호는 완전히 [citation needed]안전하지 않을 수 있습니다.
종류들
스트림 암호는 내부 상태에 근거하여 키스트림의 연속적인 요소를 생성한다.이 상태는 기본적으로 두 가지 방법으로 갱신됩니다.즉, 상태가 플레인텍스트메시지 또는 암호문 메시지와 독립적으로 변경되면 암호는 동기 스트림 암호로 분류됩니다.반면 자기동기 스트림 암호는 이전 암호문 숫자를 기반으로 상태를 업데이트합니다.
동기 스트림 암호

동기 스트림 암호에서는 의사 난수의 스트림이 일반 텍스트 및 암호 텍스트메시지와는 독립적으로 생성된 후 일반 텍스트(암호화) 또는 암호 텍스트(복호화)와 조합됩니다.가장 일반적인 형식에서는 이진수가 사용되며(비트), 키 스트림은 배타적 또는 연산(XOR)을 사용하여 일반 텍스트와 결합됩니다.이를 바이너리 가산 스트림 암호라고 합니다.
동기 스트림 암호에서는 복호화가 성공하려면 송신자와 수신자가 정확히 일치해야 합니다.전송 중에 메시지에서 숫자가 추가 또는 삭제되면 동기화가 손실됩니다.동기화를 복원하기 위해 다양한 오프셋을 체계적으로 시도하여 올바른 복호화를 얻을 수 있습니다.또 다른 방법은 출력의 일반 포인트에서 마커를 사용하여 암호문에 태그를 지정하는 것입니다.
다만, 송신중에 디지트가 파손되었을 경우, 플레인텍스트내의 1 자리수만이 영향을 받아, 에러는 메시지의 다른 부분에 전파되지 않습니다.이 속성은 전송 오류율이 높을 때 유용합니다.단, 추가 메커니즘 없이 오류가 검출될 가능성은 낮아집니다.게다가 이 속성으로 인해 동기 스트림 암호는 액티브한 공격에 매우 취약합니다. 공격자가 암호 텍스트의 숫자를 변경할 수 있는 경우 대응하는 평문 비트에 예측 가능한 변경을 가할 수 있습니다.예를 들어 암호 텍스트의 비트를 플립하면 같은 비트가 평문 내에서 플립됩니다.
스트림 암호 자체 동기화
또 다른 방법에서는 앞의 N개의 암호문 숫자를 사용하여 키 스트림을 계산합니다.이러한 방식을 자기동기 스트림 암호, 비동기 스트림 암호 또는 암호문 자동키(CTAK)라고 합니다.자기동기의 개념은 1946년에 특허 취득되어 수신기가 N개의 암호문 숫자를 수신하면 자동으로 키스트림 제너레이터와 동기화되므로 숫자가 삭제되거나 메시지스트림에 추가되어도 복구가 용이합니다.한 자리수의 오류는 그 영향이 제한되며, 영향을 받는 것은 최대 N 자리수의 보통 텍스트에 불과합니다.
자기동기 스트림 암호의 예로는 블록 암호 in cipher feedback(CFB; 암호 피드백) 모드가 있습니다.
선형 피드백 시프트 레지스터 기반
바이너리 스트림 암호는 하드웨어에서 쉽게 구현할 수 있고 수학적으로 쉽게 분석할 수 있기 때문에 LFSR(Linear-Feedback Shift Register)을 사용하여 구축되는 경우가 많습니다.단, LFSR 자체만으로는 충분한 보안을 제공할 수 없습니다.LFSR의 보안을 강화하기 위해 다양한 스킴이 제안되고 있습니다.
비선형 결합 함수
LFSR은 본질적으로 선형이기 때문에 선형성을 제거하기 위한 한 가지 기술은 여러 병렬 LFSR의 출력을 비선형 부울 함수로 공급하여 조합 제너레이터를 형성하는 것입니다.이러한 결합 함수의 다양한 특성은 예를 들어 상관 공격을 피하기 위해 결과 스킴의 보안을 확보하기 위해 중요하다.
![]() | 이 섹션은 확장해야 합니다.추가함으로써 도움이 될 수 있습니다. (2008년 6월) |
클럭 제어 발전기
통상, LFSR은 정기적으로 스텝 됩니다.비선형성을 도입하는 방법 중 하나는 LFSR을 불규칙하게 클럭하여 두 번째 LFSR의 출력으로 제어하는 것입니다.이러한 발전기에는 스톱 앤 고 발전기, 교류 스텝 발전기 및 수축 발전기가 포함됩니다.
대체 스텝 제너레이터는 3개의 LFSR로 구성되어 있으며 편의상 LFSR0, LFSR1 및 LFSR2라고 부릅니다.다른 2개의 레지스터 중 어느 것을 사용할지는 레지스터의 1개의 출력에 따라 결정됩니다.예를 들어 LFSR2가 0을 출력하면 LFSR0이 클럭되고 1을 출력하면 대신 LFSR1이 클럭됩니다.출력은 LFSR0 및 LFSR1에 의해 생성된 마지막 비트의 배타적 논리합입니다.3개의 LFSR의 초기 상태가 중요합니다.
Stop-and-Go 발전기(Beth and Piper, 1984년)는 2개의 LFSR로 구성됩니다.1초의 출력이 1이면 1개의 LFSR이 클럭되고, 그렇지 않으면 이전의 출력이 반복됩니다.이 출력은 (버전에 따라서는) 정규 레이트로 클럭된 세 번째 LFSR 출력과 조합됩니다.
수축 제너레이터는 다른 접근 방식을 취합니다.2개의 LFSR이 사용되며 둘 다 정기적으로 클럭됩니다.첫 번째 LFSR의 출력이 1일 경우 두 번째 LFSR의 출력이 제너레이터의 출력이 됩니다.단, 첫 번째 LFSR이 0을 출력하면 두 번째 출력은 폐기되고 제너레이터에 의해 비트는 출력되지 않습니다.이 메커니즘은 두 번째 제너레이터의 상태에 따라 출력 속도가 가변적이기 때문에 두 번째 제너레이터에 대한 타이밍 공격에 시달립니다.이 문제는 출력을 버퍼링함으로써 해결할 수 있습니다.
필터 발생기
LFSR 의 시큐러티를 향상시키는 또 하나의 어프로치는, 1 개의 LFSR 의 스테이트 전체를 비선형 필터링 함수로 변환하는 것입니다.
![]() | 이 섹션은 확장해야 합니다.추가함으로써 도움이 될 수 있습니다. (2008년 6월) |
기타 설계

선형 구동 장치 대신 비선형 업데이트 함수를 사용할 수 있습니다.예를 들어 Klimov와 Shamir는 n비트 워드에 대해 단일 사이클을 갖는 삼각함수(T-함수)를 제안했습니다.
![]() | 이 섹션은 확장해야 합니다.추가함으로써 도움이 될 수 있습니다. (2008년 6월) |
보안.
스트림 암호를 보호하려면 해당 키 스트림의 기간이 길어야 하며 키 스트림에서 암호 키 또는 내부 상태를 복구할 수 없어야 합니다.암호학자들은 또한 공격자가 스트림을 랜덤 노이즈와 구별할 수 있도록 하는 미묘한 편견이나 관련 키 또는 관련 암호 난스에 대응하는 키 스트림 간의 감지 가능한 관계가 없는 키 스트림에 대해서도 요구합니다.공격자가 평문 또는 암호문을 알고 선택할 수 있는 경우에도 모든 키에 해당해야 합니다(취약 키는 없어야 함).
암호학에서의 다른 공격과 마찬가지로 스트림 암호 공격은 증명서일 수 있습니다.따라서 반드시 암호를 해독하는 실용적인 방법은 아니지만 암호에 다른 약점이 있을 수 있음을 나타냅니다.
안전한 동기 스트림 암호를 사용하려면 동일한 키 스트림을 두 번 재사용하지 않아야 합니다.이는 일반적으로 암호 호출마다 다른 난스 또는 키를 제공해야 함을 의미합니다.또한 애플리케이션 설계자는 대부분의 스트림 암호는 인증이 아닌 개인 정보를 제공하므로 암호화된 메시지가 전송 중에 변경되었을 수 있습니다.
스트림 암호의 짧은 기간이 실질적인 문제가 되어 왔다.예를 들어 DES와 같은 64비트 블록 암호를 사용하여 출력 피드백(OFB) 모드에서 키 스트림을 생성할 수 있습니다.그러나 전체 피드백을 사용하지 않을 경우 결과 스트림은 평균 약 2블록의32 주기를 갖습니다. 많은 애플리케이션의 경우 기간이 너무 짧습니다.예를 들어 암호화가 초당 8메가바이트의 속도로 수행되는 경우 약 30분 후에 [dubious ]기간 2블록의32 스트림이 반복됩니다.
스트림 암호 RC4를 사용하는 일부 애플리케이션은 RC4의 키 셋업 루틴의 취약성으로 인해 공격을 받을 수 있습니다.새로운 애플리케이션은 RC4를 회피하거나 모든 키가 고유하고 이상적으로 관련이 없는 것(예: 잘 시드된 CSPRNG 또는 암호화 해시 함수에 의해 생성됨)을 확인하고 키 스트림의 첫 번째 바이트를 폐기해야 합니다.
스트림 암호의 요소는 블록 암호보다 훨씬 이해하기 쉬우므로 우발적이거나 악의적인 약점을 숨길 가능성이 적습니다.
사용.
스트림 암호는 하드웨어 및 안전한 무선 연결과 같이 알 수 없는 길이의 플레인텍스트가 있는 어플리케이션에서 구현의 속도와 단순성을 위해 자주 사용됩니다.블록 암호(스트림 암호 모드로 동작하지 않음)를 이러한 유형의 응용 프로그램에서 사용하는 경우 블록 암호는 블록 크기보다 짧은 블록에서 직접 작동할 수 없기 때문에 설계자는 전송 효율성 또는 구현 복잡성 중 하나를 선택해야 합니다.예를 들어 128비트블록 암호로 32비트버스트의 플레인텍스트를 수신했을 경우 전송되는 데이터의 4분의 3이 패딩이 됩니다.블록 암호는 패딩을 피하기 위해 암호문 도용 모드 또는 나머지 블록 종단 모드에서 사용해야 합니다.한편 스트림 암호는 전송 가능한 최소 단위(일반적으로 바이트)에서 자연스럽게 동작함으로써 이 문제를 제거합니다.
군사용 암호학에서 스트림 암호의 또 다른 장점은 암호 스트림을 별도의 상자에 생성하여 엄격한 보안 조치를 받아야 하며, XOR 연산을 기능의 일부로 수행하는 무선 장치 등의 다른 장치에 공급할 수 있다는 것입니다.그 후, 후자의 디바이스를 설계해, 보다 엄격한 환경에서 사용할 수 있습니다.
ChaCha는 소프트웨어에서 [1]가장 널리 사용되는 스트림 암호로 자리매김하고 있습니다.다른 암호로는 RC4, A5/1, A5/2, 카멜레온, FISH, Helix, ISAK, MUGI, 파나마, 펠릭스, Pike, Salsa20, SEAL, SEAL, SCERENE, SERE-128 및 WAKE가 있습니다.
비교
이 섹션은 확인을 위해 추가 인용문이 필요합니다.(2014년 7월 (이 및 ) |
개울. 암호 | 창조. 날짜. | 스피드 (바이트당 사이클 수) | (비트) | 공략 | |||
---|---|---|---|---|---|---|---|
효과적 키길이 | 초기화 벡터 | 내부의 주 | 가장 잘 알려진 것 | 계산 복잡성 | |||
A5/1 | 1989 | ? | 54 또는 64(2G) | 22(2G) | 64 | 액티브 KPA OR KP 타임-메모리 트레이드오프 | 최대 2초 또는 2개39.91 |
A5/2 | 1989 | ? | 54 | 114 | 64? | 활동적인 | 4.6 밀리초 |
악터반-128/80 | 2006 | 1 (표준) | 80/128 | 80/128 | 297/351 | 프레임 길이 L 22의44 브루트포스.L 248 2의 상관 공격. | L80 244 2의 경우, 2의 경우, 2의128 경우. |
암호화 | 2005 | ? | 변수 | 최대 19968 | 19968 | — (2008) | — (2008) |
암호-1 | 1994년 이전 | ? | 48 | 16 | 48 | 액티브 KPA (2008) | 40 밀리초 또는 248 (2008)[2] |
E0(암호화) | 1999년 이전 | ? | 변수 (통상 128) | 4 | 132 | KPA (2005) | 238 (2005)[3] |
물고기. | 1993 | ? | 변수 | ? | ? | 기존 플레인텍스트 공격 | 2개11 |
곡물 | 2004년 이전 | ? | 80 | 64 | 160 | 키 파생 | 2개43 |
HC-256 | 2004년 이전 | 4 (WP4) | 256 | 256 | 65536 | ? | ? |
아이작 | 1996 | 2.375 (W64-bit) – 4.6875 (W32-bit) | 8–8288 (통상 40~256) | — | 8288 | (2006) 1라운드 약한 내부 상태 정보 | 4.67×101240(2001) |
미키 | 2004년 이전 | ? | 80 | 변수(0 ~ 80) | 200 | 차등 고장 공격(2013년) | 232.5 (2013년)[4] |
뮤기 | 1998–2002 | ? | 128 | 128 | 1216 | — (2002) | ~ 282 |
파나마 | 1998 | 2 | 256 | 128? | 1216? | 해시 충돌(2001) | 2개82 |
펠릭스 | 2004년 이전 | 최대 8 (Wx86) | 256 + 128비트 난스 | 128? | ? | 차동 (2006) | 2개37 |
파이크 | 1994 | ? | 변수 | ? | ? | — (2004) | — (2004) |
파이 | 2004년 이전 | 2.6 | 8–2048? (보통 40~256?) | 64 | 8320 | 암호 분석 이론 (2006) | 2개75 |
토끼 | 2003년 2월 | 3.7(WP3)~9.7(WARM7) | 128 | 64 | 512 | — (2006) | — (2006) |
RC4 | 1987 | 7 WP5[5] | 8–2048 (통상 40~256) | RC4는 IV를 사용하지 않습니다.만약 누군가가 링거를 원한다면, 그것은 어떻게든 키에 섞여야만 한다. | 2064 | Shamir 초기 바이트 키 파생 OR KPA | 213 OR 233 |
살사20 | 2004년 이전 | 4.24 (WG4) – 11.84 (WP4) | 256 | 64비트 난스 + 64비트 스트림 위치 | 512 | 확률론적 중성 비트법 | 8라운드용 2개251(2007) |
소리 지르다 | 2002 | 4 ~ 5 (Wsoft) | 128 + 128비트 난스 | 32? | 64비트 라운드 함수 | ? | ? |
밀봉하다 | 1997 | ? | ? | 32? | ? | ? | ? |
눈 | 2003년 이전 | ? | 128 또는 256 | 32 | ? | ? | ? |
SERCHENE-128 | 2003 | ? | 최대 128 | ? | ? | 메시지 위조 | 2개−6 |
소세마누크 | 2004년 이전 | ? | 128 | 128 | ? | ? | ? |
트리비움 | 2004년 이전 | 4 (Wx86) – 8 (WLG) | 80 | 80 | 288 | 무차별 공격 (2006) | 2개135 |
튜링 | 2000–2003 | 5.5 (Wx86) | ? | 160 | ? | ? | ? |
베끼 | 2005 | 42 (WASIC) – 64 (WFPGA) | 변수 (통상 80 ~256) | 변수 (통상 80 ~256) | 256–800 | — (2006) | — (2006) |
일어나. | 1993 | ? | ? | ? | 8192 | CPA 및 CCA | 취약. |
개울. 암호 | 창조. 날짜. | 스피드 (바이트당 사이클 수) | (비트) | 공략 | |||
효과적 키길이 | 초기화 벡터 | 내부의 주 | 가장 잘 알려진 것 | 계산 복잡성 |
트리비아
「 」를 참조해 주세요.
메모들
- ^ "Do the ChaCha: Better mobile performance with cryptography". 23 February 2015.
- ^ Garcia, Flavio D.; de Koning Gans, Gerhard; Muijrers, Ruben; van Rossum, Peter; Verdult, Roel; Schreur, Ronny Wichers; Jacobs, Bart (4 October 2008). "Dismantling MIFARE Classic" (PDF). 13th European Symposium on Research in Computer Security (ESORICS 2008), LNCS, Springer.
- ^ Lu, Yi; Meier, Willi; Vaudenay, Serge (2005). The Conditional Correlation Attack: A Practical Attack on Bluetooth Encryption (PDF). Crypto 2005. Lecture Notes in Computer Science. Vol. 3621. Santa Barbara, California, USA. pp. 97–117. CiteSeerX 10.1.1.323.9416. doi:10.1007/11535218_7. ISBN 978-3-540-28114-6.
- ^ Banik, Subhadeep; Maitra, Subhamoy; Sarkar, Santanu (2013). "A Differential Fault Attack on MICKEY 2.0". Cryptology ePrint Archive.
- ^ P. Prasithsangaree and P. Krishnamurthy (2003). "Analysis of Energy Consumption of RC4 and AES Algorithms in Wireless LANs" (PDF). IEEE Globecom. Archived from the original (PDF) on 2013-12-03.
레퍼런스
- Matt J. B. Robshaw, Stream Ciphers Technical Report TR-701, 버전 2.0, RSA Laboraties, 1995(PDF).
- Beth, Thomas; Piper, Fred (1985). The Stop and Go Generator (PDF). EUROCRYPT '84. pp. 88–92. doi:10.1007/3-540-39757-4_9.
- Christof Paar, Jan Pelzl, "Stream Ciphers", "암호학의 이해, 학생과 실무자를 위한 교과서" 제2장.(회사 웹 사이트에는 스트림 암호 및 LFSR을 다루는 온라인 암호화 코스가 포함되어 있습니다), Springer, 2009.