2017-05-02 12 views
2

libsodium, 특히 대칭 암호화 옵션 XChaCha20-Poly1305에서 검색했습니다. 내가 머리를 쓸 수 없다는 것은 libsodium이 암호화 라이브러리에서 흔히 볼 수있는 "컨텍스트/업데이트/완료"작업 스타일을 제공하지 않는 것처럼 보입니다.대용량 파일 용 libsodium XChaCha20-Poly1305 사용

libsodium에서 XChaCha20-Poly1305 메시지의 크기에는 "실제적인 제한이 없습니다"라는 것이 명확합니다. 그러나 실제로 여러 GB 파일을 암호화하는 경우 libsodium을 어떻게 사용할지 명확하지 않습니다. 분명히 fread 버퍼의 내용을 crypto_aead_xchacha20poly1305_ietf_encrypt으로 전달하기 때문에? 또래 집단의 압력에 굴복 한 후이 주제

OFF 생각하는 사람들에게

중요 사항은,이 게시물을 삭제했다. 그러나 나는 주제에 대해 강하게 느낀 @MaartenBodewes의 요청에 따라 그것을 다시 열었으며 매우 강력하게 답변을 쓰려고 노력했습니다. 그러므로 그의 노력에 대한 존경심으로 나는 그 게시물의 삭제를 취소했다. 제발, 더 많은 "오프 주제"코멘트를 남겨주세요, 나는 그들 중 충분히 읽었습니다!

+0

@MaartenBodewes 그것은 나에게 화제가 아니지만 보안에 관해서는 더 잘 물어볼 것입니다 .SE (가까운 유권자에게 : "다른 곳에 잘 맞습니다"는 닫아야 할 이유가 아닙니다.) –

+0

재미있게도 필자는 Security.SE를 작성하기 시작했습니다. 그런 다음 10 분 동안 생각하고 앉아있었습니다. 그런 다음 Security.SE에 현명한 사람들을 결정했다 .SE는 아마 그 "프로그래밍"관련 불평하고 대신 여기에 나를 가리킨 것입니다. 모두를 만족시키지 않을 것 같아요! ;-( –

+0

글쎄, 알고리즘을 구현하는 것입니다 (여기서 주제가 아닌 Stack Overflow는 당신이 코드를 작성하는 데 도움이되지 않습니다), 라이브러리를 사용하는 것에 관한 것입니다 (이 경우, [mcve]와 a 명확한 문제 성명서) 또는 알고리즘의 잠재적 인 결함에 대해서는 어떻게 생각하십니까? 보안이 더 좋을 것이라고 생각합니다 .SE가 마지막 일 경우에는 [this] (https : /security.stackexchange.com/help/on-topic) –

답변

2

libsodium의 소개에서 "그 목표는 상위 수준의 암호화 도구를 만드는 데 필요한 모든 핵심 작업을 제공하는 것입니다."

Libsodium은 따라서 상대적으로 기본 구조에 대한 제한된 액세스를 제공하는 고급 라이브러리입니다. 말했다


, 인증 암호를 사용하여 대형 파일을 암호화하는 몇 가지 고유 한 어려움이있다. 문제는 인증을 확인하기 전에 다음에이 해독되기 시작하거나 온라인의 암호를 해독해야한다는 것입니다. 즉, 검증에 실패하면 내용을 작성/파기해야합니다.

일반적으로 예를 들어 다음과 같이 암호화하여 해결할 수 있습니다. 16KiB 정도의 블록을 만든 다음 블록에 인증 태그를 추가하십시오. 물론 nonce (스트림 암호의 카운터가 반복되지 않음을 확인)를 늘려야합니다. 이것은 약간의 오버 헤드를 물론 추가 할 것입니다. 그러나 멋진 것은 없습니다. 어쨌든 오버 헤드가 있습니다. 단점은 더 이상 제자리에서 암호 해독 할 수 없다는 것입니다 (그로 인해 틈이 남을 수 있음).

정말 고급 스키마를 만들고 싶다면 마지막에 모든 인증 태그를 저장할 수도 있습니다. 또는 메모리에있는 모든 인증 태그를 버퍼링하고 수집 된 모든 태그에 대해 단일 (HMAC) 태그를 계산하십시오.

따라서 crypto_aead_xchacha20poly1305_ietf_encrypt을 여러 번 호출하는 것이 옵션으로 간주 될 수 있습니다. 그렇게하면 파일 특정 키를 계산하여 0에서 nonce를 시작할 수 있습니다.


저장된 파일의 기밀 만 유지하려는 경우 인증 태그를 남겨 둘 수 있습니다.이 경우 수동 int crypto_stream_xchacha20_xor_ic를 사용하여 키 스트림을 생성하는 데 사용되는 카운터에 영향을 미칠 수있다 : 이것은 이전의 것들을 계산하지 않고 모든 블록에 직접 액세스를 허용

.

분명히 libsodium에서도 사용할 수있는 HMAC-SHA-2를 사용하여 인증 태그를 추가 할 수 있지만 분명히 poly1305를 사용하는 것보다 느립니다.


마지막으로 libsodium은 오픈 소스입니다. 당신이 대단히 용감하다면, 당신은 피투성이의 세부 사항에 들어가서 자신 만의 컨텍스트를 구축/업데이트/마무리 할 수 ​​있습니다. 알고리즘은 확실히 그것을 지원합니다 (힌트 :이 경로를 거치면 암호 해독 루틴 동안 인증 태그 또는 논스를 버퍼링하지 마십시오. 직접 해독하십시오).

+0

감사합니다. 감사합니다. –