[security] 파일 암호화를위한 AES vs Blowfish

바이너리 파일을 암호화하고 싶습니다. 내 목표는 암호가없는 사람이 파일을 읽지 못하도록하는 것입니다.

키 길이가 같은 AES 또는 Blowfish 중 더 나은 솔루션은 무엇입니까? 공격자가 파일 크래킹을위한 훌륭한 리소스 (소프트웨어, 지식, 돈)를 가지고 있다고 가정 할 수 있습니다.



답변

아마 AES. Blowfish는 Twofish의 직접적인 전신이었습니다. Twofish는 Bruce Schneier가 AES를 생산 한 대회에 참가했습니다. AES가 된 Rijndael이라는 항목보다 열등하다고 판단되었습니다.

흥미로운 점은 경쟁의 한 지점에서 모든 참가자에게 암호 순위에 대한 의견을 제시하라는 요청을 받았습니다. 각 팀이 자신의 출품작을 최고로 선택한 것은 놀라운 일이 아니지만 다른 모든 팀이 Rijndael을 2 위로 꼽았습니다.

즉, 절대적인 보안 측면에서 Blowfish를 선호 할 수있는 Blowfish 대 AES의 기본 목표에는 몇 가지 기본적인 차이점이 있습니다. 특히, Blowfish는 초기 키 설정을 상당히 느린 작업으로 만들어 무차별 대입 (키 소진) 공격을 어렵게 만듭니다. 일반 사용자의 경우 이는 거의 중요하지 않지만 (여전히 1 밀리 초 미만 임)이를 깨기 위해 초당 수백만 개의 키를 시도하는 경우 차이가 상당히 큽니다.

그러나 결국 나는 그것을 주요 이점으로 보지 않습니다. 일반적으로 AES를 추천합니다. 다음 선택은 아마도 Serpent, MARS 및 Twofish 일 것입니다. Blowfish는 그 후에 어딘가에 올 것입니다 (Blowfish보다 앞서 추천 할 몇 가지 다른 것이 있지만).


답변

블록 암호의 블록 크기도 중요한 보안 고려 사항이라는 사실은 잘 알려져 있지 않습니다 (키 크기만큼 중요하지는 않지만).

Blowfish (및 3DES 및 IDEA와 같은 같은 시대의 대부분의 다른 블록 암호)는 64 비트 블록 크기를 가지고 있으며, 이는 오늘날 일반적인 대용량 파일 크기 (파일이 클수록 블록 크기가 작을수록 불충분 한 것으로 간주됩니다) , 암호문에서 반복되는 블록의 확률이 높으며 이러한 반복 된 블록은 암호화 분석에 매우 유용합니다.

반면 AES의 블록 크기는 128 비트입니다. 이 고려 사항만으로도 Blowfish 대신 AES를 사용하는 것이 정당합니다.


답변

알고리즘 자체에 관해서는 AES와 함께 갈 것입니다. 간단한 이유는 NIST에 의해 승인되었고 수년 동안 피어 리뷰 및 암호화가 이루어지기 때문입니다. 그러나 실제 응용 프로그램에서는 정부가 비밀로 유지하려는 파일을 저장하지 않는 한 (이 경우 NSA가 AES와 Blowfish보다 더 나은 알고리즘을 제공 할 것입니다) 이러한 알고리즘 중 하나를 사용하여 너무 많은 차이를 만들지 마십시오. 모든 보안은 키에 있어야하며 두 알고리즘 모두 무차별 대입 공격에 저항력이 있습니다. Blowfish는 전체 16 라운드를 사용하지 않는 구현에서만 약한 것으로 나타났습니다. 그리고 AES가 더 새로워졌지만 그 사실은 당신이 BlowFish에 더 의지하게 만들 것입니다 (나이 만 고려한다면). 이렇게 생각해보세요.

이 두 알고리즘을 살펴보고 알고리즘 중 하나를 선택하는 대신 키 생성 체계를 살펴 보지 않겠습니까? 파일의 암호를 해독하려는 잠재적 인 공격자는 거기에 앉아서 사용할 수있는 이론적 인 키 집합을 생각 해낸 다음 몇 달이 걸릴 수있는 무차별 대입 공격을 수행하지 않을 것입니다. 대신 그는 서버 하드웨어를 공격하거나, 어셈블리를 리버스 엔지니어링하여 키를 확인하거나, 키가있는 구성 파일을 찾거나, 친구를 협박하여 컴퓨터에서 파일을 복사하도록하는 등 다른 것을 악용 할 것입니다. . 그것들은 알고리즘이 아니라 당신이 가장 취약한 곳이 될 것입니다.


답변

AES.

(나는 또한 당신이 훨씬 오래되고 약한 복어가 아닌 twofish를 의미한다고 가정하고 있습니다)

둘 다 (AES 및 twofish) 좋은 알고리즘입니다. 그러나 그들이 동등하거나 두 마리의 물고기가 기술적 장점에서 약간 앞서더라도 나는 여전히 AES를 선택했을 것입니다.

왜? 널리 알려짐. AES는 정부 암호화의 표준이므로 수백만 개의 다른 기관에서도이를 사용합니다. 재능있는 암호 분석가는 AES에서 결함을 발견 한 후 “돈을 벌기 위해”더 많은 것을 얻습니다.

모호성은 암호화를 보호하지 않습니다. 알고리즘을 찾고, 연구하고, 조사하고, 공격하는 시체가 더 많을수록 좋습니다. 당신은 가능한 가장 “검토 된”알고리즘을 원하는데 바로 지금 AES입니다. 알고리즘이 강렬하고 지속적인 조사의 대상이 아닌 경우 강도에 대한 신뢰도를 낮춰야합니다. 물론 twofish는 손상되지 않았습니다. 그것은 암호의 강도 때문입니까 아니면 단순히 사람이 충분하지 않아서 자세히 살펴 보았 기 때문입니까 ….. YET


답변

알고리즘 선택은 그다지 중요하지 않습니다. 더 잘 연구되었으므로 AES를 사용합니다. 훨씬 더 중요한 것은 올바른 작동 모드와 키 유도 기능을 선택하는 입니다.

빠른 랜덤 액세스를 원하는 경우 영감을 얻기 위해 TrueCrypt 형식 사양을 살펴볼 수 있습니다. 랜덤 액세스가 필요하지 않은 경우 XTS는 최적 모드가 아닙니다. 다른 모드에는없는 약점이 있기 때문입니다. 또한 일종의 무결성 검사 (또는 메시지 인증 코드)를 추가 할 수도 있습니다.


답변

이 답변이 귀하의 질문의 용어를 위반한다는 것을 알고 있지만 귀하의 의도에 대한 정답은 간단하다고 생각합니다. 가장 긴 키 길이를 허용하는 알고리즘을 사용하고 정말 좋은 키를 선택했는지 확인하십시오. 가장 잘 알려진 알고리즘 (암호화 및 연대순)의 성능의 사소한 차이는 몇 가지 추가 키 비트로 인해 압도됩니다.


답변

두 알고리즘 (AES 및 twofish) 모두 매우 안전한 것으로 간주됩니다. 이것은 다른 답변에서 광범위하게 다루어졌습니다.

그러나 AES는 현재 2016 년에 널리 사용되기 때문에 ARM 및 x86과 같은 여러 플랫폼에서 특히 하드웨어 가속이 적용되었습니다. 하드웨어 가속 이전의 twofish보다 훨씬 빠르지는 않지만 이제 전용 CPU 명령 덕분에 AES가 훨씬 빠릅니다.