내 암호가 눈사태 효과를 나타내도록하려면 어떻게해야합니까?

저는 암호화 초보자입니다. 저는 임의의 솔트와 암호를 사용하여 메시지를 암호화하는 암호 기반 암호화-복호화 알고리즘을 설계했습니다. 해싱에는 SHA-512를, 셔플에는 매트릭스 연산을, 데이터 혼합 및 검색에는 비트 XOR을 사용하고 있습니다. 솔트와 암호문의 길이는 256 자입니다.

내가 아는 한 눈사태 효과 는 다음 중 약간의 변경을 의미합니다.

  • 암호
  • 비밀번호
  • salt

출력을 대폭 변경해야합니다.

제 구현에서 솔트 나 암호를 변경해도 큰 변화는 보이지 않습니다. 산출. 그러나 암호가 약간 변경되면 출력이 크게 변경됩니다.

그래서 내 질문 :

  • 눈사태 효과에 대한 이해가 일반적으로 맞습니까? 그렇지 않다면 어떻게해야합니까?
  • 내 (또는 다른) 암호에서 눈사태 효과를 가장 잘 생성하려면 어떻게해야합니까? 눈사태 효과를 만들기 위해 솔트 길이를 줄이고 더 작은 암호문을 생성해야합니까? 그렇지 않다면 어떻게 할 수 있습니까?

댓글

  • 호기심에서 해시를 무엇에 사용하고 있습니까?
  • Cryptography Stack Exchange에 오신 것을 환영합니다. @Avinash, 귀하의 질문은 Stack Overflow보다 주제에 더 가깝기 때문에 여기로 마이그레이션되었습니다. 댓글을 달고 답변을 수락하려면 여기에 계정을 등록하세요.
  • 건설적인 답변을 원하면 현재 암호가 어떻게 작동하는지 보여 주어야합니다 (수학적 공식에서 선호 됨). 그런 다음 개선 방법을 살펴볼 수 있습니다.
  • ' " 자신 만의 암호를 설계하지 ' "-여기에 암호 화폐 ' s 물론 모든 위험은 본인이 감수해야한다는 것을 이해해야하지만 시도하는 것은 완벽하게 허용됩니다. 🙂 ' 또한 부재시 눈사태 효과에 더 집중하기 위해 질문을 약간 수정했습니다. 관련 암호 구조의. 불필요하다고 생각하는 사람이 있으면 언제든지 롤백하거나 제가 ' 한 일을 개선하세요.

답변

실제 암호 알고리즘을 변경하지 마십시오. Kerckhoffs의 원칙 에 대해 읽어보십시오. 실제 알고리즘이 아닌 키와 IV와 같은 것만 변경합니다.

눈사태를 테스트하려면 키를 한 비트 뒤집습니다. 출력 비트의 절반 정도가 변경되어야합니다.

암호 설계를 위해 Applied Cryptography 가 이미 제안되었습니다. 뿐만 아니라 알고리즘에 Diffusion과 Confusion을 도입하는 것도 살펴 봐야합니다. 또한 기존 알고리즘을 연구하는 동안 어떻게 작동하는지 확인하는 것이 좋습니다. 저는 저만의 간단한 Feistel 암호 를 디자인하는 것으로 시작했습니다. 그런 식으로 주변 구조가 이미 많이 완성되었습니다. 또한 F 함수가 반전 될 필요가 없다는 점에서 설계를 단순화합니다. 이를 통해 해당 영역에서 훨씬 더 많은 유연성을 얻을 수 있습니다.

학습 연습 이외의 다른 용도로 자신의 디자인을 사용하지 않는다는 경고는 좋은 것입니다.

댓글

  • 대단히 고맙습니다 ….
  • Cypher / cipher는 영국 / 미국의 것입니다.

답변

자신 만의 암호화-복호화 알고리즘을 구축하는 것이 대단하다고 생각합니다. 그런 식으로 암호화에 대해 많이 배울 것입니다. 지금까지 crypto encryption-decryption 알고리즘은 처음에 어떤 식 으로든 매우 교육적인 끔찍한 결함을 구축합니다.

용어

당신의 질문을 올바르게 이해했다면 당신은 완벽하게 눈사태 효과에 대한 합리적인 질문입니다.하지만이 사이트의 대부분의 사람들은 귀하의 비표준 용어에 대해 너무 혼란스러워 “귀하의 질문을 이해할 수도 없습니다.

귀하의 질문을 올바르게 이해했다면, 당신은 암호화-복호화 시스템을 구축하고 있습니다. 일반 텍스트를 입력으로 사용하고 데이터를 암호화 된 파일로 저장 한 다음 나중에 올바른 암호를 가진 사람이 저장된 파일을 해독하고 원래의 일반 텍스트 입력과 동일한 비트 단위로 해독 된 일반 텍스트를 복구 할 수 있도록합니다.

당신과 같이 일반적인 암호화 프로그램은 암호화 된 파일이 생성 될 때 암호화 보안 난수 생성기에 의해 새로 생성 된 초기화 벡터 (IV)로 시작하는 암호화 된 파일을 생성합니다.그런 다음 암호화 프로그램은 입력 파일을 일부 고정 된 블록 크기 의 일반 텍스트 블록으로 자르고 일부 블록 암호 모드를 사용합니다. 블록 암호 를 통해 각 블록 (및 암호화 키)을 처리하기 위해 “암호화 모드”에서 작업을 수행하여 결국 암호화 된 블록 암호화 된 파일에 추가되는 동일한 블록 크기. “패딩”및 “메시지 인증”과 관련하여 끝 부분에 약간의 이상한 부분이 종종 있습니다.

나중에 해독 프로그램은 암호화 된 파일을 동일한 고정 블록 크기의 암호화 된 블록으로 자르고 각 블록에 피드 ( 암호화 키) “복호화 모드”에서 동일한 블록 암호 작동 모드를 사용하여 블록 암호를 통해 일반 텍스트 블록을 복구하고 모든 일반 텍스트 블록을 함께 연결하여 원본 일반 텍스트 파일과 비트 단위로 동일한 파일을 복구합니다. .

해싱에 SHA-512를 사용하고 있습니다.

좋습니다. SHA-512는 훌륭한 해싱 알고리즘입니다. 내부 라운드 기능의 일부로 이것을 사용하거나 기본 암호화 키에서 하위 키를 생성하는 경우 작동합니다. 불필요하게 복잡해 보입니다.

SHA-512를 다음과 같이 사용하는 경우 암호에서 기본 암호화 키를 생성하는 키 파생 함수 (KDF)를 사용하면 많은 사람들이 “충분히 복잡하지 않다고 말합니다.

셔플 링

비정상적이지만 작동 할 수 있습니다.

데이터 혼합 및 검색을위한 비트 XOR.

실제로 모든 최신 암호화 알고리즘은 많은 비트 XOR 연산을 사용합니다. 많은 최신 암호화 알고리즘은 모듈 식 추가, 고정 된 회 전량의 회전, 내부 루프 (라운드 반복)의 XOR (ARX) 만 사용하도록 설계되었습니다.

내가 사용하는 내부 라운드 함수는 꽤 좋습니다. XOR 만 , 회전 만 또는 모듈 추가 만 하는 것은 사용되는 라운드 반복 횟수에 관계없이 치명적으로 안전하지 않습니다.

(XOR 및 행렬 연산의 특정 조합의 보안에 대해 충분히 알지 못합니다.)

salt이고 암호문은 256 자입니다.

당신이 “초기화 벡터 (IV)의 길이와 각 암호문 블록의 길이는 256 자입니다. . “

단방향 암호화 해싱에서”소금 “이 사용됩니다. 암호화가 무엇인지 이해하도록 도와 주시겠습니까 " 소금 "은? 입니다. “IV”는 양방향 암호화 (암호화 및 복호화 모두)에 사용됩니다. “salt”와 “IV”는 모두 공개적으로 알려진 것으로 간주되는 새로 생성 된 임의의 값이지만 용어는 이러한 값이 다른 종류의 시스템에서 사용된다는 것을 암시합니다.

대부분의 사람들이 길이를 설정합니다. IV는 블록 크기와 같으므로 “굉장합니다.

제 이해는 1997 AES 대회 발표 이전에 개발 된 거의 모든 암호가 64 비트 (8 바이트) 이하의 블록 크기를 사용한다는 것입니다. 분명히 그것이 충분하지 않다고 생각했지만, 내가 아는 한 모두가 128 비트 (16 바이트)의 블록 크기가 적절하다고 생각하는 것 같습니다.

256 바이트의 블록 크기가 작동합니다. 불필요하게 커 보입니다.

눈사태 효과

블록 암호를 통해 일반 텍스트의 각 블록을 실행할 때 (일부 암호화 모드에서) 눈사태 효과는 단일 비트 변경을 의미합니다. 다음 중 하나 :

  • 일반 텍스트 블록의 데이터
  • 비밀번호
  • IV

암호문 블록을 과감하게 출력합니다 (비트의 절반 정도).

블록 암호를 통해 각 암호문 블록을 실행할 때 (일부 복호화 모드에서) 눈사태 효과는 다음 중 하나에서 단일 비트 변경을 의미합니다.

  • 암호문 블록
  • 암호
  • IV

출력 “일반 텍스트”블록을 대폭 변경해야합니다 (약 절반 비트).

구현에서 솔트 나 암호를 변경해도 출력에 큰 변화가 없습니다.

두 가지 중 하나를 말씀하신 것 같습니다.

  • ” 시작 o 암호화 된 파일 (예 : IV 또는 초기 암호문 블록)의 경우 “출력 일반 텍스트 파일의 끝 부분에 큰 변화가 없습니다.”

변경은 (보안) CBC (Cipher Block Chaining) 또는 일부 다른 작동 모드를 사용할 때 항상 발생합니다. 따라서 반드시 문제가되는 것은 아닙니다.

그러나 (보안) PCBC (Propagating Cipher Block Chaining) 모드를 사용하고 있다고 생각한다면 문제가 될 수 있습니다. 구현 버그.

또한 이러한 변경 부족은 (안전하지 않은) ECB (Electronic Codebook) 모드를 사용할 때 예상되는 결과입니다.

선택한 작업 모드에 관계없이 암호 해독 프로그램 암호화 된 파일의 단일 비트가 손상 될 때마다 파일이 MAC 인증 검사에 실패했다는 무서운 경고를 출력해야합니다.

  • ” 암호화 된 파일의 단일 암호화 된 암호문 블록, “내 출력 일반 텍스트 파일의 해당 일반 텍스트 블록에 큰 변경 사항이 없습니다.”

예, 이것은 심각한 결함을 나타냅니다. 블록 암호 알고리즘은 눈사태 효과가 좋지 않습니다. 이것은 알고리즘에 충분한 혼합이 없다는 신호입니다. 이는 일반적으로 시스템이 chosen-ciphertext 공격 및 유사한 공격에 취약하다는 것을 의미합니다.

내 (또는 다른) 암호에서 눈사태 효과를 가장 잘 생성하려면 어떻게해야합니까? 눈사태 효과를 내기 위해 솔트 길이를 줄이고 더 작은 암호문을 생성해야합니까?

“크기를 줄여야하나요?” 눈사태 효과를 생성하기위한 IV 및 블록 크기? “

일반적으로 필요하지 않습니다.

눈사태 효과를 생성하는 가장 일반적인 접근 방식은 Wikipedia 블록 암호 기사 :

나는 한 라운드 후에 완전한 눈사태를 일으키는 블록 암호를 모릅니다. 블록 암호를 설계하는 사람들은 블록 암호가 모든 표준 암호화 공격 에 저항 할 수 있도록 충분한 수의 라운드를 선택하려고합니다. 이는 전체 눈사태를 생성하기에 충분합니다. .

블록 암호를 설계하는 사람들은 일반적으로 하나의 일반 블록 암호 설계 체계를 선택하고 블록 암호 프로그램이 선택한 라운드 수에 걸쳐이를 반복하도록합니다. 가장 널리 사용되는 일반 블록 암호 설계 체계는 다음과 같습니다.

  • 대체 치환 네트워크
  • Feistel 암호
  • Lai-Massey 암호

각각에는 내부 비선형 함수가 필요합니다. 초기 블록 암호는 종종 단일 라운드에서 거의 눈사태를 달성하는 각 라운드에서 몇 가지 복잡한 내부 기능을 사용합니다. 현대 암호는 종종 많은 라운드 후에 눈사태를 달성하기에 충분한 비선형 성을 가진 매 라운드마다 매우 간단하고 빠른 내부 함수 (몇 가지 ARX 함수)를 사용합니다.

댓글

  • 참고 : khazad 암호 는 단일 라운드 후에 완전히 확산됩니다. 저도 '이 작업을 수행하는 장난감을 만들었습니다. ' 확실히 가능하며 그렇게 할 수있는 방법을 찾는 것은 재미 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다