다음 시나리오에 적합한 알고리즘이 궁금합니다.
- 32 비트 “일반 텍스트” 입력, 카운터에서 가져옴
- 32 또는 64 비트 “암호문”출력
- 키로 출력을 해독 할 수 있어야합니다. 오프셋 및 현재 카운터), 원래의 32 비트 카운터 값을 반환합니다.
- 사용자는 입력을 전혀 관찰하지 않지만 순차적 인 출력을받을 수 있습니다. 어떤 인덱스가 있는지 알 수 있습니다.
- 유효한 카운터 값에 해당하는 다른 출력을 추측하기는 어렵습니다.
내가 학습하지 못한 직감은 키와 출력이 입력 공간보다 크면 적어도 처음 몇 개의 출력에 대해 “좋은”결과를 얻는 것이 상당히 쉬워야합니다. 그러나 충분한 샘플을 사용하면 키와 인덱스를 쉽게 계산할 수 있다는 것도 논리적으로 보이지만 대부분의 경우를 예상합니다. l을 사용하려면 값이 100 개 미만입니다.
제 질문은 다음과 같습니다.
- 이 시나리오에서 작동하는 기존 알고리즘이 있습니까?
- 얼마나 어려울까요? 갈라진 금? 즉, 유효한 인덱스로 복호화하는 값을 계산합니다.
- 더 많은 샘플을 보유하면 크래킹 효율성에 얼마나 영향을 미칩니 까?
-
순진한 접근 방식의 문제점은 무엇입니까? 예 :
u64 output = input repeat 64x output = ((output ^ key) + key) rotate-left 37
덧셈이 64 비트 정수 경계를 둘러싼다고 가정합니다. 임의의 키를 단일 입력과 완전히 혼합하는 것처럼 보이지만 둘 이상의 출력은 공격자가 보유한 정보를 빠르게 증가시킬 수 있지만 방법은 알 수 없습니다. 분명히 깨질 것입니다. 저는 단지 배우려고합니다.
-
(((key & 0xFFFE)+1) * 37)
더 나아질까요? 얼마나 도움이되며 그 이유는 무엇입니까? - 알고리즘을 분석하고 더 나은 알고리즘을 설계하기 위해 어떤 접근 방식, 리소스 등을 사용 하시겠습니까?
댓글
- 이것은 설명하는 방식으로 매우 XY 문제입니다. CSPRNG (S 참고)는 ' 이에 대한 좋은 솔루션이 아닌 것 같습니다. 키 크기 요청이 약간 이상합니다. 더 큰 키 크기를 사용할 수없는 이유는 무엇입니까?
- 키 크기가 필수가 아닌 것 같습니다. 64 비트 키가 32 비트 값을 암호화하기에 충분하기를 바랐습니다.
Answer
- 이 시나리오에서 작동하는 기존 알고리즘이 있습니까?
예, 실제로 , 64 비트 블록 암호가 있습니다. 표준적인 통념은 표준 블록 암호 모드가 생일 경계 (이 경우 약 30GB)에 가까워지면 정보 유출을 시작하는 경향이 있기 때문에 일반적인 사용에는 권장되지 않는다는 것입니다. 그러나 사용 사례에서는 그렇지 않습니다. 다음은 몇 가지 옵션입니다.
-
3DES (일명 TDES), 이것은 세 가지 다른 키를 사용하여 세 번 적용되는 DES이며 이점이 있습니다. 매우 잘 연구되고 있습니다.
-
Speck 에는 64 비트 블록 암호가있는 매개 변수 세트가 있습니다. 가장 빠른 대안이라는 장점이 있으며, 자신이하고 있다는 것을 알고 놀라운 양의 암호화 분석을 수행 한 사람들이 설계했습니다.
-
FPE 암호 (예 : 임의의 블록 크기 (64 비트 포함)를 처리 할 수있는 FF1. 이것은 조정 옵션 ( “기타 숨겨진 매개 변수”를 배치 할 수있는 편리한 장소)을 허용한다는 점에서 이점이 있습니다. ). 이것의 대안보다 느립니다. FF1을 사용하면 보안은 AES의 기본 보안과 Feistel 구조의 입증 가능한 보안에서 비롯됩니다.
이제 이들은 64 비트보다 긴 키를 사용합니다. 일반적인 상식은 64 비트 키는 길이가 충분하지 않다는 것입니다.
- 크래킹이 얼마나 어렵습니까? 즉, 유효한 인덱스로 복호화하는 값을 계산합니다.
위의 경우 공격자가 가질 수있는 유일한 실용적인 옵션은 다음과 같습니다. 무작위로 암호문을 추측하고 유효한 색인으로 해독되는 암호문을 우연히 발견하기를 바랍니다.
- 더 많은 샘플이 크래킹의 효율성에 영향을 미칩니 까?
위의 항목에 대해 방대한 양의 샘플을 보유하면 여전히 공격을 실행할 수 없습니다.
- 다음과 같은 순진한 접근 방식의 문제점
ARX 암호 (실제로는 모든 암호, 특히 ARX)는 올바르게 사용하기가 까다 롭습니다. 특히 ARX 암호는 차등 및 선형 특성을 방해하지 않는 경향이 있습니다. 디자인이 제대로 작동하는지 확인하려면 정말 잘 연구해야합니다.)
- 알고리즘을 분석하고 더 나은 알고리즘을 설계하기 위해 어떤 접근 방식, 리소스 등을 사용 하시겠습니까?
이미 분석 된 디자인을 사용하는 것이 좋습니다. 위에 세 가지를 나열했습니다.
댓글
- I ' 예를 들어 비교적 작은 키 입력의 변경이있는 경우 3DES보다 Blowfish를 선호합니다. 3DES의 보안은 키가 128 비트 (또는 오히려 112 비트)로 확장 되었더라도 의심 할 수 있습니다.
- @MaartenBodewes : 3DES를 알 수없는 키가 임의의 짝수 순열과 구별 되나요?
- 아니요, 물론 아닙니다.하지만 내 암호화에 ~가있는 경우 추론 할 필요도 없습니다. ' 128 비트 또는 192 비트 키를 입력 할 때 80 비트 또는 ~ 112 비트 강도 ('이 작업을 수행 할 수 있다는 것은 의심의 여지가 없지만, 우리는 모든 판초가 아닙니다). 키 크기가 문제인 것 같습니다. 이 경우 패리티 비트를 버리는 것은 낭비입니다.
- " 문에 대해 자세히 설명해 주시겠습니까? 이제 64 비트보다 긴 키를 사용합니다. 일반적으로 64 비트 키는 길이가 충분하지 않습니다. "? 어떤 알고리즘이 어떤 길이의 키를 필요로하고 64 비트 키는 정확히 무엇을 위해 충분히 길지 않습니까?
- @shader : 64 비트의 키는 대규모 (재원이 풍부한) 적의 무차별 대입 검색에 취약합니다. 누구에게도 취약하지 않은 ' 다소 큰 키 (예 : 128 비트)를 사용하는 것이 일반적으로 쉽기 때문에 일반적으로 더 안전한 옵션을 선택합니다 (' NSA가 우리를 공격하는 데 관심이 있거나 Amazon이 전체 클라우드를 우리에게 바칠 지 여부를 즉시 염려하지 않습니다 …