2013-04-11 1 views
2

저는 지난 며칠 동안 문제를 해결하려고했습니다. 공용 키 교환 + 사인온 후 내 끝점은 클라이언트와 서버 간의 메시지를 암호화하기 위해 Rijndael 대칭 암호화 스키마로 전환합니다.CryptoStream 재 구축시 얼마나 많은 오버 헤드가 있습니까?

문제는 암호화 된 스트림을 만들어 채널이 여러 개의 연결을 보내는 데 사용되므로 가장 좋은 방법이라고 생각합니다. 그렇게하면 암호화가 기본 스트림으로 완전히 출력되지 않습니다. MSDN의 당, 그것은 말한다 : 당신 는 Close 메서드를 호출을 사용하여 수행 한 후

당신은 항상 명시 적으로시키는 CryptoStream 개체를 닫아야합니다. 이렇게하면 스트림이 플러시되고 나머지 모든 블록이 CryptoStream 개체에 의해 처리됩니다.

메시지를 보낼 때마다 다시 작성해야하는 오버 헤드가 많은 것처럼 보입니다. 거기에 어떤 이유가 있습니까, 아니면 방금 뭔가 빠졌습니까?

+0

주의 : AES에서 좀 더 복잡한 프로토콜을 만들 때; 암호화를 완전히 깨뜨리는 미묘한 실수를하는 것은 매우 쉽습니다. 자체 암호화 시스템을 사용하는 대신 기존 프로토콜 (TLS)을 사용하십시오. – Daniel

+0

Rijndael WAS를 사용하여 기존의 암호화 시스템을 사용하고 있다고 생각 했습니까? – sircodesalot

+0

아니요, 암호화 알고리즘 일뿐입니다. 그리고 올바르게 사용하는 것은 매우 복잡합니다. 일반적으로 사용되는 SSL/TLS 프로토콜도 처음에는 잘못된 AES 사용 (BEAST 공격 등)으로 인해 고장 났으며 업데이트해야했습니다. – Daniel

답변

2

AES (Rijndael)는 고정 크기 블록을 사용하므로 출력은 블록 크기의 배수가 될 수 있습니다. 입력이 블록 크기에 맞춰져 있지 않으면 채워집니다. 해독시이 패딩이 제거됩니다. 얼마나 많은 패딩을 추가할지, AES는 정확한 스트림 길이를 알아야합니다. 그리고 그 길이는 스트림이 끝날 때 (닫힌 후에) 결정될 수 있습니다.

+0

아, 이렇게 닫으면 스트림 크기가 얼마나 큰지 알 수 있습니까? – sircodesalot

+0

@sircodesalot, 예. 나는 그 대답에 덧붙였다. – alex

관련 문제