Ethereum 키 저장소 파일 형식을 사용하여 모든 종류의 데이터를 암호화하는 AES-128-CTR은 얼마나 안전하지 않습니까?
On 11월 18, 2020 by admin저는 이더 리움 키 저장소 파일 형식을 사용하여 일반 텍스트 또는 JSON과 같은 다른 데이터를 암호화하고 있습니다.
다음은 구현 의사 코드 :
MY_PASSWORD = "VeryDifficultPasword432131!@!#%" MY_TEXT = "This is my secret text" iv = randomBytes(16) kdfparams = { dklen: 32, n: 262144, r: 1, p: 8, salt: randomBytes(32) } key = scrypt(MY_PASSWORD, kdfparams) ciphertext = encryptCipheriv("aes-128-ctr", MY_TEXT, key, iv) mac = sha3(key[16:32], ciphertext)
이 코드를 사용하여 다음과 같은 키 저장소 파일을 생성 할 수 있습니다.
{ "crypto" : { "cipher" : "aes-128-ctr", "cipherparams" : { "iv" : "83dbcc02d8ccb40e466191a123791e0e" }, "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", "kdf" : "scrypt", "kdfparams" : { "dklen" : 32, "n" : 262144, "r" : 1, "p" : 8, "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19" }, "mac": "102aedfe8c308c735a76295f9908d9b7de40fb1c07f2f71e05de7a0b2f323a12" } }
이것은 수백만 달러의 사람들을 이더에 저장하는 표준 파일입니다.
질문 :
- 안전한가요?
- 그렇지 않다면 그 이유는 무엇입니까?
- 그렇다면 일반 텍스트 또는 JSON (16 진수 형식 없음)을 암호화해도 안전합니까?
- 더 작은
kdfparams.n
?
편집 : 다른 사람이 다음과 같이 말했기 때문에 내가이 질문을하는 이유를 명확히하기 위해 :
이것은 전혀 안전하지 않습니다.이 구현에는 많은 기본 오류가 포함되어 있습니다. 한 가지 예는 암호화 보안을 완전히 파괴하는 안전하지 않은 난수 생성기를 사용하는 것입니다. 다른 하나는 AES를 사용하는 것입니다. 인증없이 128-CTR.
댓글
Answer
최악의 순전히 암호화의 약점은 암호입니다 (1). 최악의 (그리고 훨씬 더 나쁜) 실질적인 약점은 구현 (6) (7)과 암호학자가 암호화의 범위를 벗어난 것으로 무시하는 (4) (5) 일 가능성이 높습니다 (질문의 유일한 목표).
암호화 (하지만 여전히 고려해야 할 사항)에서 구현에 이르기까지 약점에 대한 후보 :
- 암호 : 약 48 비트 이상의 엔트로피를 가진 암호를 기억하기 어렵습니다 ( 이는 3141592653589793 또는 2718281828459045와 같은 16 자리 숫자와 거의 동일하며 필수 XKCD 에서 구상 된 것보다 많습니다. N = 262144 = 2 18 , r = 1, p = 8 = 2 3 을 사용하여 최소 18 + 3 + 1 = 22 비트에서 구매합니다 ( this )는 AES-128이 뒤 따르는 직선 SHA-256 해시와 비교할 때 약 32 비트 더 강하다고 생각합니다. 따라서 키는 약 80 비트 양호 할 수 있습니다. 완전히 깨지지는 않지만 무차별 대입이지만 여전히 매우 안전합니다.
- AES-128 : 128 비트 키가 있으며 순수하게 암호화되지 않은 것으로 알려져 있습니다. 무차별 대입보다 공격이 낫기 때문에 암호보다 훨씬 낫습니다.
- CTR 모드 : AES의 128 비트 블록을 사용하면 키 스트림 재사용이 시작될 수있는 유일한 방법은 잘못된 난수입니다. IV 용 생성기 (6 참조)
- 평문의 크기는 암호문의 크기에서 쉽게 추론 할 수 있습니다. 이것은 길이 때문에 암호화의 이론적 약점이 명시 적으로 아닙니다 . 암호문이 일반 텍스트에 대해 숨겨야하는 내용에서 제외됩니다. 그러나 이는 실제적인 약점 일 수 있습니다. 암호문 분석 결과 17267095423 옥텟; 그리고 검찰 어딘가에 정확히 그 크기의 파일이 존재하며, 이는 암호문의 수색 및 압수를 앞두고 있으며 단순한 구금은 불법입니다.
- 일반 텍스트의 예측 가능한 변경에 해당하는 (의도적 또는 우발적) 암호문 변경 감지 부족 : 다시 말하지만 이는 암호화의 이론적 약점이 명시 적으로 아닙니다 , 일부 공격을 허용 할 수 있습니다. 공격자가 암호문을 변경할 수있는 경우 (예 : 일반 텍스트가 실행 파일이거나 알려진 분수가있는 PDF 인 경우 실행 파일이 어떤 작업에 대해 수행하는 작업을 변경하거나 PDF가 모든 것에 대해 표시되도록 할 수 있음) 인증 된 암호화 ( AES-GCM ..)는이를 해결합니다.
- 무작위 번호 생성기 : 이것이 나쁘거나 더 나빠지면 다소 멈춤 (의무 XKCD 및 Dilbert 이는 너무나 자주 현실화 됨) 동일한 비밀번호로 다른 영어 텍스트 또는 이메일 주소를 반복적으로 암호화하는 것을 포함하여 많은 시나리오에서 일반 텍스트를 복구 할 수있게합니다.
- 광범위한 측면 채널 구현 또는 사용 컨텍스트에서 예상치 못한 또는 완화되지 않은 정보 유출을 말합니다. 너무 많습니다.
- 절차 적 실수 (포스트잇 메모의 암호, 마스터 암호 목록)를 악용하여 암호 소유자로부터 암호 복구, 고무 호스 암호화 (의무적 인 XKCD ), 법적 변형 ( 법원 경멸 에 대한 표현 사용 포함), 뇌물 수수, 화학 함침 ..
-
숄더 서핑 , 키 로거 (소프트웨어 또는 하드웨어), 카메라, 마이크 (좋은 오디오 캡처 비밀번호를 입력 할 때의 키 소리는 비밀번호에 대한 많은 정보를 유출합니다. 특히 동일한 조건에서 동일한 운영자가 알고있는 키보드 입력과 관련이있을 때 ..
- 화면에 표시된대로 일반 텍스트의 직접적인 손상 TEMPEST 변형), 인쇄, 프린터로 전송하거나 네트워크를 통해 원격으로 액세스하거나 “일시적으로”저장합니다.
- 마하 OS의 직접적인 타협 암호화 또는 복호화를 수행합니다 (임시 루트 액세스로 충분합니다. 7.7에서는 공격자에게 게임이됨을 의미합니다).
- 를 포함하여 원거리에있는 암호화 사이드 채널 DPA 및 전자기 변형 DEMA, 암호화 / 복호화를 수행하는 시스템이 네트워크에 의해 액세스되고 iv id =를 사용하지 않는 경우 가상적으로 타이밍 “fdf33bb454″>
AES 지침 .
댓글
- 비밀번호를 해시하면 더 유용 할 것입니다. 암호화 전? sha 또는 md5 사용과 같은가요?
key = scrypt(sha(MY_PASSWORD), kdfparams)
- @EnZo : scrypt에 진입하기 전에 암호를 해싱해도 암호 공격의 난이도가 크게 변경되지 않습니다 ( 포인트 1).이를 개선하려면 더 나은 암호, 더 나은 scrypt 매개 변수화 또는 더 나은 암호 기반 키 파생 체계 (Argon? Balloon?)
답변
위의 체계에서 공격받을 수있는 주요 보안 요소는 물론 암호문입니다. 이제 솔트는 레인보우 테이블 공격을 피하는 데 중요하지만 그렇지 않은 경우 그다지 보안을 추가하지 않습니다. 솔트와 암호가 합리적으로 고유 한 경우 키도 고유합니다. 이 경우 IV는 그다지 중요하지 않습니다.
안전하지 않은 난수 생성기를 사용하는 것은 나쁘지만 실제 보안에 큰 영향을주지는 않을 것입니다. 그러나 , 이는 실제로 나쁜 사례가 배포되었음을 나타냅니다. 동일한 안전하지 않은 임의 생성기를 사용하여 암호를 생성 한 경우 어떻게됩니까? 다른 구현 오류가 나타나면 어떻게합니까?
인증되지 않은 암호문을 사용하는 것이 더 문제가됩니다. 공격자는 각 비트에 대한 일반 텍스트를 변경할 수 있습니다. 공격자는 단순히 모든 암호문 비트를 반전 할 수 있으며 동일한 위치에있는 일반 텍스트 비트도 반전됩니다. 이는 지갑을 사용할 때 오류 또는 문제가 발생한다는 것을 의미합니다. 지갑 내용의 기밀성은 손실되지 않지만 인증 된 암호화를 사용하는 것이 가장 좋습니다.
댓글
- 감사합니다! 설명해 주 시겠어요? 이 모드로 인증 된 암호문을 얻는 방법은 거의 없습니까? 위의 예는 원래 키 저장소 파일에서 제거한 원래의 mac 속성과 관련이 있다고 생각하기 때문입니다.
- CTR 모드는 CCM, GCM, EAX, SIV 및 기타 인증 된 기타의 기본 모드입니다. 암호. 그러나 CTR 모드와 (H) MAC의 조합도 확실히 안전 할 수 있습니다.둘 다 거의 동일한 크기 / 보안으로 인증 태그를 생성합니다. CCM과 EAX는 CTR과 MAC의 특정 조합에 지나지 않습니다. 여기서 동일한 키를 암호와 MAC에 사용할 수 있습니다.
- ' ve 암호에 대한 일반적인 지식을 사용하여이 질문에 최선을 다해 답했습니다. Ella Rose는 질문에 제공된 정보로는 시스템 의 보안을 결론을 내릴 수 없다는 것이 맞습니다. 그래서 저는 ' CTR 사용에만 초점을 맞추 었습니다.
- 음, 무작위는 결국 시스템 무작위에 의존하는 것 같습니다. 종종 시스템 랜덤 소스는 비교적 안전하며 CSPRNG라는 용어는 소스에서 실제로 언급됩니다. 따라서 시스템 랜덤이 제대로 구현되지 않았거나 시드되지 않는 한 랜덤이 아니라는 주장은 잘못된 것입니다.
- SHA-3에서 직접 MAC을 만드는 것은 권장되지 않습니다. 대신 KMAC를 사용해야합니다 (아마도 그 당시에는 ' 아직 지정되지 않았습니다). 하지만 키와 암호문의 연결을 통한 사용이 문제가되는 상황은 생각할 수 없습니다.
보안 " . 그러나 합리적인 정의에 따르면 1234 ', 크고 중복 된 일반 텍스트는 사용할 수있는 것이 안전하지 않습니다.
이국적인 공격 .