RC5
RC5RC5 블록 암호의 1라운드(2개의 하프라운드) | |
| 일반 | |
|---|---|
| 디자이너 | 론 리베스트 |
| 초판 | 1994 |
| 후계자 | RC6, 아켈라르 |
| 암호 상세 | |
| 키 사이즈 | 0 ~ 2040 비트 (128 비트 권장) |
| 블록 크기 | 32, 64 또는 128비트(64비트 권장) |
| 구조. | 파이스텔형 네트워크 |
| 라운드 | 1-255(원래 12개 권장) |
| 최고의 퍼블릭 암호 분석 | |
| 12-라운드 RC5(64비트블록 포함)는 2개의 선택된 플레인텍스트를 [1]사용하여44 차분 공격을 받기 쉽습니다. | |
암호학에서 RC5는 단순성으로 유명한 대칭 키 블록 암호입니다.Ronald Rivest가 1994년에 [2]설계한 RC는 "Rivest Cipher" 또는 "Ron's Code"(RC2와 RC4 비교)의 약자입니다.Advanced Encryption Standard(AES) 후보 RC6는 RC5를 기반으로 합니다.
묘사
많은 스킴과 달리 RC5에는 가변 블록사이즈(32, 64 또는 128비트), 키사이즈(0 ~2040비트) 및 라운드수(0 ~255)가 있습니다.처음에 권장되었던 파라미터는 64비트 블록사이즈, 128비트키 및 12라운드였습니다.
RC5의 주요 특징 중 하나는 데이터 의존형 순환을 사용하는 것입니다. RC5의 목표 중 하나는 암호화[citation needed] 프리미티브로서 이러한 운영의 연구와 평가를 촉진하는 것입니다.또한 RC5는 다수의 모듈러 추가 및 eXclusive OR(XOR)로 구성됩니다.알고리즘의 일반적인 구조는 Feistel과 같은 네트워크입니다.암호화 및 복호화 루틴은 몇 줄의 코드로 지정할 수 있습니다.그러나 주요 일정은 더 복잡하며, "nothing up my sleeve number"의 소스로 e와 황금 비율의 바이너리 확장과 함께 기본적으로 단방향 함수를 사용하여 키를 확장합니다.알고리즘의 심플함과 데이터 의존 회전의 참신함으로 인해 RC5는 암호 분석가들에게[according to whom?] 매력적인 연구 대상이 되었습니다.RC5는 기본적으로 RC5-w/r/b로 표시됩니다.여기서 w=워드 사이즈(비트), r=라운드 수, b=키 내의 8비트바이트 수.
알고리즘.
RC5 암호화와 복호화 모두 랜덤키를 2(r+1) 워드로 확장하여 암호화 및 복호화 프로세스에서 순차적으로(각 1회만) 사용합니다.아래 내용은 RC5에 [3]관한 Rivest의 개정 문서에서 발췌한 것입니다.
키 확장
키 확장 알고리즘은 먼저 의사 코드로, 다음으로 참조 용지의 부록에서 직접 복사한 C 코드 예를 다음에 나타냅니다.
이 문서의 명명 체계에 따라 다음과 같은 변수 이름이 사용됩니다.
- w - 비트 단위의 워드 길이.통상은 16, 32 또는 64 입니다.암호화는 2단어 블록으로 이루어집니다.
- u = w/8 - 워드 길이(바이트 단위)입니다.
- b - 키의 길이(바이트 단위).
- K [ ] - 바이트 배열로 간주되는 키입니다(0 베이스 인덱스 사용).
- c - 단어의 키 길이(또는 b = 0인 경우 1).
- L [ ] - 키 스케줄링 중에 사용되는 임시 동작 어레이.단어의 키로 초기화되었습니다.
- r - 데이터를 암호화할 때 사용할 라운드의 수.
- t = 2(r+1) - 필요한 라운드 서브키 수
- S [ ] - 둥근 서브키워드
- Pw - d (( - )2 ) { Od ( ( e - ) * { 로 되는 첫 번째 매직 상수. 여기서 Od는 주어진 입력에 가장 가까운 홀수 정수, e는 자연 로그의 밑수, w는 위에서 정의됩니다.w의 공통값의 경우 P의 관련값은w 다음과 같이 16진수로 표시됩니다.
- w = 16의 경우: 0xB7E1
- w = 32의 경우: 0xB7E15163
- w = 64의 경우: 0xB7E151628AED2A6B
- Qw - 매직 상수는 d( ( " - 1 ) 2 Odd ( ( ( ( - 1 )로 정의됩니다.Od는 지정된 입력에 가장 가까운 홀수 정수입니다.서 style \는 황금 비율이며 w는 위에서 정의됩니다.w의 공통값의 경우 Q의w 관련값은 16진수로 표시됩니다.
- w = 16의 경우: 0x9E37
- w = 32의 경우: 0x9E3779B9
- w = 64의 경우: 0x9E3779B97F4A7C15
# K를 말로 나누다 # u = w / 8 c = 천장.(맥스.(b, 1) / u) # L은 처음에 0 값의 w-length 워드의 c-length 리스트입니다. 위해서 i = b-1 밑. 로. 0 하다: L[i / u] = (L[i / u] <<<< > 8) + K[i] # 키에 의존하지 않는 의사 난수 S 어레이 초기화 # S는 처음에 정의되지 않은 w-length 워드의 t=2(r+1) 길이 리스트입니다. S[0] = 전원 위해서 i = 1 로. t-1 하다: S[i] = S[i - 1] + Q_w # 메인 키 스케줄링 루프 i = j = 0 A = B = 0 하다 3 * 맥스.(t, c) 시대: A = S[i] = (S[i] + A + B) <<<< > 3 B = L[j] = (L[j] + A + B) <<<< > (A + B) i = (i + 1) % t j = (j + 1) % c 반환수 S 소스 코드의 예는 RC5에 관한 Rivest 논문의 부록에 기재되어 있습니다.구현은 w = 32, r = 12 및 b = 16과 함께 작동하도록 설계되었습니다.
무효 RC5_SETUP(서명되어 있지 않다 차 *K) { // w = 32, r = 12, b = 16 // c = max(1, ceil(8 * b/w)) // t = 2 * (r+1) 단어 i, j, k, u = w/8, A, B, L[c]; 위해서 (i = b-1, L[c-1] = 0; i != -1; i--) L[i/u] = (L[i/u] << > 8) + K[i]; 위해서 (S[0] = P, i = 1; i < > t; i++) S[i] = S[i-1] + Q; 위해서 (A = B = i = j = k = 0; k < > 3 * t; k++, i = (i+1) % t, j = (j+1) % c) { A = S[i] = ROTL(S[i] + (A + B), 3); B = L[j] = ROTL(L[j] + (A + B), (A + B)); } } 암호화
암호화에는 간단한 기능이 여러 번 포함되어 있었습니다.보안의 필요성과 시간 고려사항에 따라 12~20라운드가 권장되는 것으로 보입니다.위에서 사용한 변수 외에 이 알고리즘에서는 다음 변수가 사용됩니다.
- A, B - 암호화할 평문 블록을 구성하는 두 단어.
A = A + S[0] B = B + S[1] 위해서 i = 1 로. r 하다: A = ((A ^ B) <<<< > B) + S[2 * i] B = ((B ^ A) <<<< > A) + S[2 * i + 1] # 암호문 블록은 A와 B로 구성된 2단어 폭 블록으로 구성되어 있습니다. 돌아가다 A, B Rivest에 의해 제시된 C코드의 예는 다음과 같습니다.
무효 RC5_암호화(단어 *pt, 단어 *ct) { 단어 i, A = pt[0] + S[0], B = pt[1] + S[1]; 위해서 (i = 1; i <=> r; i++) { A = ROTL(A ^ B, B) + S[2*i]; B = ROTL(B ^ A, A) + S[2*i + 1]; } ct[0] = A; ct[1] = B; } 복호화
암호 해독은 암호화 프로세스의 매우 간단한 반전입니다.다음 의사 코드는 프로세스를 나타내고 있습니다.
위해서 i = r 밑. 로. 1 하다: B = ((B - S[2 * i + 1]) >>> A) ^ A A = ((A - S[2 * i]) >>> B) ^ B B = B - S[1] A = A - S[0] 돌아가다 A, B Rivest에 의해 제시된 C코드의 예는 다음과 같습니다.
무효 RC5_DECrypt(단어 *ct, 단어 *pt) { 단어 i, B=ct[1], A=ct[0]; 위해서 (i = r; i > 0; i--) { B = ROTR(B - S[2*i + 1], A) ^ A; A = ROTR(A - S[2*i], B) ^ B; } pt[1] = B - S[1]; pt[0] = A - S[0]; } 암호 분석
12-라운드 RC5(64비트블록 포함)는 2개의 선택된 플레인텍스트를 [1]사용하여44 차분 공격을 받기 쉽습니다.18~20라운드는 충분한 보호로 권장된다.
이러한 과제에는, Distributed.net가 정리한 분산 컴퓨팅을 사용해 대처하고 있습니다.분산.net은 56비트키와 64비트키를 사용하여 암호화된 브루트 강제 RC5 메시지를 가지고 있으며 2002년 [4]11월 3일부터 72비트키 크래킹에 임하고 있습니다.2021년 8월 6일 현재 키 공간의 7.900%가 검색되었으며, 그날 기록된 속도에 따르면 키 [5]공간의 100%를 완료하는 데 127년이 걸립니다.이 작업은 클러스터 [6]컴퓨팅 분야에서 많은 새롭고 새로운 개발에 영감을 주었습니다.
이 알고리즘에 [7]관한 특허를 취득한 RSA Security는 RC5로 암호화된 암호문을 깨는 것에 대해 US$10,000의 상금을 내걸었지만, 2007년 [4]5월부로 이러한 콘테스트는 중단되었습니다.그 결과, distributed.net는 상금을 지원하기로 결정했다.당첨된 키를 발견한 개인은 미화 1,000달러, 팀(해당하는 경우)은 미화 1,000달러, 자유 소프트웨어 재단은 [8]미화 2,000달러를 받게 됩니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b Biryukov A.와 Kushilevitz E.(1998).RC5의 암호 분석 개선. EUROCRYPT 1998.
- ^ Rivest, R. L. (1994). "The RC5 Encryption Algorithm" (PDF). Proceedings of the Second International Workshop on Fast Software Encryption (FSE) 1994e. pp. 86–96.
- ^ http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf[베어 URL PDF]
- ^ a b "distributed.net: Project RC5". www.distributed.net. Retrieved 14 December 2019.
- ^ RC5-72 / 전체 프로젝트 통계
- ^ "Archived copy". Archived from the original on 2014-10-28. Retrieved 2014-10-28.
{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ Rivest, R. L., "Block Encryption Algorithm With Data Dependent Rotation", 미국 특허 5,724,428은 1998년 3월 3일에 발행되었습니다.
- ^ "distributed.net: staff blogs – 2008 – September – 08". Retrieved 15 December 2019.