Py (암호)
Py (cipher)파이(Py)는 일라이 비햄과 제니퍼 세베리가 eSTREAM에 제출한 스트림 암호다. 일부 플랫폼에서 바이트당 약 2.6 사이클로 가장 빠른 eSTREAM 후보 중 하나이다. RC4와 약간 비슷한 구조를 가지고 있지만, 바이트 순열을 이용하여 색인화한 260개의 32비트 단어를 배열하여 각 라운드에서 64비트를 생산한다.
저자들은 라틴어 문자가 아닌 키릴어(Cyrillic, ру)로 표기된 'Py'자를 읽음으로써 암호의 호주어 유래를 가리키는 'Ruo'로 발음해야 한다고 주장한다. 이 다소 비뚤어진 발음은 고급 암호화 표준으로 채택된 암호에 대해 발음하기 어려운 이름인 Rijndael에 대한 농담으로 그들의 대답으로 이해된다.
- 원래의 2005년 4월 제안서는 암호 Py와 단순화된 버전 Py6를 포함했다. 후자는 일부 내부 테이블의 크기를 줄여 키 스케줄링 비용을 크게 절감하고 최대 출력 길이를 줄인다.
- 2006년 6월, 저자들은 파이피(더 혼란스럽게 반 키릴식 피르할을 반 키릴식 피르할을 선택적으로 더 강한 변종이라고 표현했다. 이것은 Py의 각 반복에서 출력 단어 중 하나를 생략하고, 따라서 Py의 절반 이상의 속도로 작동한다. (실제로 약 0.6배).
- 2007년 1월, 키 스케줄 알고리즘이 변경되어, "트위크" 변종 TPy, TPypy, TPy6가 생성되었다. 정확히 말하면 첫 번째(키 의존적) 단계는 수정되지 않지만, 두 번째(IV 설정) 단계에는 오류가 수정된다. 출력을 생성하는 데 사용되는 둥근 기능은 동일하다.
- Indocrypt 2007에서 Gautham Sekar, Souradiuti Paul, Bart Preneel은 각각 Pypy와 Py의 설계 원리를 바탕으로 두 개의 새로운 암호자 RCR-32와 RCR-64를 제안했다. 이들은 Py에서 변수 회전을 고정 회전으로 대체하여 공격을 제거하고 암호의 속도를 약간 높인다. TPy 키 일람표는 수정되지 않은 채 사용된다.
파이 패밀리에 대한 공격
2006년[update] 현재 Py에 대한 최고의 암호 해독 공격(홍준 우와 바트 프레넬)은 어떤 상황에서 (예를 들어 IV가 키보다 훨씬 긴 경우) 2개의24 선택된 IV에 대해 부분 키스트림이 주어지는 키를 복구할 수 있다[1].
공격자의 관점에서 보다 어려운 시나리오에서는 (선택된 일반 텍스트가 아닌) 알려진 일반 텍스트만 주어지는 경우, 약 2바이트의72 출력과 비교 가능한 시간이 필요한 키스트림(폴 크롤리)에 대한 구별되는 공격도 있다. 이는 2바이트가88 필요한 고텀 세카르, 사라디우티 폴, 바트 프레넬의 공격에 대한 개선이다. 이러한 공격들이 Py의 학문적 단절을 구성하는지는 아직 논쟁이 있다. 때 인질범들은 위의 공격 작업 부하 Py의 설계 사양에 의거하여는 철저한 수색보다 및 암호화는 그래서, 그것은 명백한 이론적인 휴식으로 건설될 수 있다고 주장한다 왜냐하면 Py의 보안 범위를 264바이트의 출력물의 모든 keystreams ev을 가로질러 모두 어떠한 공격 제한하는 디자이너들이 공격을 통치하고 있다.e료지 최근 개정된 바울, 프레넬, 세카르 논문은 9절에서 이 문제에 대한 상세한 논의를 포함하고 있다. 우와 프레넬 공격의 정당성에 대해서는 의심의 여지가 없다.
py는 eSTREAM 프로젝트[2]에 의해 프로파일 1의 2단계 포커스 후보(소프트웨어)로 선정되었으나, 우와 프레넬이 선택한 IV 공격에 의해 3단계로 진출하지 못했다. [3].
2007년 1월, 위의 공격을 제거하기 위해 Py의 설계자들에 의해 TPy, TPypy, TPy6와 같은 3개의 새로운 암호들이 제안되었다. TPy는 주요 일정에 의존하지 않는 Paul et al. (복잡성88 2)와 Crowley (복잡성 272)의 위의 구별되는 공격에 여전히 취약하다. 암호의 파이 계열 중 가장 강한 것으로 추측되는 TPypy에 대한 지금까지 최고의 공격은 데이터 복잡성 2를281 가진 구별되는 공격인 Sekar 등의 공격이다. 이번 공격은 TPypy의 키 사이즈가 281비트 이상일 경우에만 의미가 있다.
TPy와 TPypy에 대한 공격을 제거하기 위해 Indocrypt 2007의 Sekar, Paul, Preneel은 두 개의 새로운 암호자 RCR-32와 RCR-64에 대한 제안을 했다. 현재까지 RCR-32와 RCR-64에 대한 공격은 없다.
라운드 함수
파이(Py)는 "슬라이딩 어레이(sliding array)"라는 아이디어를 기반으로 한다. 즉, 어레이는 각 라운드마다 한 단어씩 발전하는 시작 포인터(start pointer)를 기준으로 인덱싱된다. modulo 인덱싱(하드웨어 및 많은 디지털 신호 처리기)을 사용할 수 있는 경우 이를 원형 버퍼로 구현할 수 있다. 소프트웨어에서, 이것들은 큰 배열로 가장 쉽게 구현된다. 어레이의 끝에 도달하면 작업 부분이 다시 시작 부분으로 복사되고 작업이 계속된다.
256바이트 P 배열은 256 입력 순열(각 바이트가 정확히 한 번 표시됨)을 포함하고, Y 배열은 260개의 32비트 단어를 포함하고 있다.
#include <stdint.h> #Define ROTL32(x, s)(x)<<<<(x)>>(32-(s)) uint8_t *P; // P[0] ~ P[255]가 활성화됨 uint32_t *Y; // Y[-3] ~ Y[256]가 활성화됨 uint32_t s; uint32_t *생산량; 하는 동안에 (output_words--) { 인트로 i = Y[185] % 256; P[256] = P[i]; // 이렇게 하면 P[0]와 P[i]가 효과적으로 교환된다. P[i] = P[0]; // 그런 다음 P[0]를 P[256]에 복사 P++; // 이전 P[1]는 새로운 P[0]이고, 방금 쓴 P[256]는 새로운 P[255]이다. s += Y[P[72]] - Y[P[239]]; s = ROTL(s, (P[116] + 18) % 32); *생산량++ = (ROTL(s, 25) ^ Y[256]) + Y[P[26]]; // 이 선은 Pypy & TPypy에서 생략됨 *생산량++ = ( s ^ Y[-1] ) + Y[P[208]]; Y[257] = (ROTL(s, 14) ^ Y[-3] ) + Y[P[153]]; Y++; // 이전 P[-2]는 새로운 P[-3], 방금 쓴 P[257]는 새로운 P[256]이다. }
바이트 출력이 필요한 경우 Py는 출력 워드를 little-endian으로 변환하도록 지정한다.
17호선은 Pypy, Tpypy, RCR-32에서 생략한다.
RCR-32와 RCR-64는 라인 15가 고정 좌회전 19비트로 바뀐다는 점을 제외하면 위와 동일하다.
Py6는 구조는 같지만 P와 Y 배열은 각각 64바이트와 68단어로 단축된다. P 항목은 6비트 길이에 불과해 전용 하드웨어에서 활용할 수 있는 절약량이다. 여러 가지 상쇄가 되다. P[]
그리고 Y[]
물론, 내측 루프를 수정하여 다음과 같이 한다.
하는 동안에 (output_words--) { 인트로 i = Y[43] % 64; P[64] = P[i]; P[i] = P[0]; P++; s += Y[P[18]] - Y[P[57]]; s = ROTL(s, (P[26] + 18) % 32); *생산량++ = (ROTL(s, 25) ^ Y[64]) + Y[P[8]]; *생산량++ = ( s ^ Y[-1]) + Y[P[21]]; Y[65] = (ROTL(s, 14) ^ Y[-3]) + Y[P[48]]; Y++; }
외부 링크
- Eli Biham, Jennifer Seberry, Py 사양(PostScript)
- Eli Biham, Jennifer Seberry, The Ciphers TPy, TPypy, TPy6 Stream Ciphers의 파이 패밀리의 IV Setup Tweaking
- eStream 페이지(Py)
- 폴 크롤리, 파이 크립트 분석
- Souradyuti Paul, Bart Preenel, Gautham Sekar, 하천 암호 Py, FSE 2006에 대한 구분 공격.
- Gautham Sekar, Souradiuti Paul, Bart Preneel, Stream Ciphers TPypy 및 TPy의 Phasorandom 비트 생성 알고리즘의 약점, IACR-ePrint 보고서.
- Souradyuti Paul, Bart Preenel, On (In)Security Based Arrays and Modular Addition (Full Version) , Asicrypt 2006.
- Gautham Sekar, Souradiuti Paul, Bart Preenel, Ciphers의 Py-family에 대한 관련 키 공격 및 취약점 복구 접근법, Indocrypt 2007.
- Rijndael 페이지 - "Rijndael FAQ"는 Py 규격의 부록 B에 부드럽게 패러디되어 있다.