5

스트림암호 설명 중간 부분이 이해가 안갑니다.

만약 송신자와 수신자가 평문 길이 만큼의 스트림을 매번 공유할 수 있다면, 스트림을 모르는 공격자는 암호문을 복호화할 수 없습니다. 하지만 평문과 같은 길이의 스트림을 안전하게 공유할 수 있다면, 스트림을 공유하는 채널로 평문을 공유하면 되므로 암호화가 필요하지 않은 환경임을 의미합니다. 이게 무슨 말인지 이해가 안갑니다. 그러면 원래는 스트림을 보내는 공간이 작기 때문에 스트림을 평문 길이만큼 공유하기 힘들다는 뜻인가요?

답변 2개
4

음 좋은 질문이네요

스트림암호 : 송신자와 수신자가 공유하는 데이터 스트림을 생성하고 이를 평문에 XOR하는 암호입니다. 평문을 P, 암호문을 C, 스트림을 X라고 할 때, 암호문 C는 C=P⊕X로 생성됩니다. (강의 내용에 써있죠)

암호의 기본 조건 : 한 마디로 랜덤성입니다. 스트림암호는 이 랜덤성의 조건을 송신자와 수신자가 공유하는 데이터 스트림으로 충족시키고 있는 것입니다. 다만 모든 대칭키 암호가 그러하듯이 이 키가 곧 암호화와 복호화의 핵심이기 때문에 이 키를 어떻게 공유할 것이냐(즉 어떻게 주고받을 것이냐가) 핵심이 됩니다
(보안에서 랜덤성이 중요하기 때문에 app.secret_key = os.urandom(32) 이런 것도 하고 그러는 거죠 ^^)

강의 중간에 나오는 말의 의미 : ‘만약 송신자와 수신자가 평문 길이 만큼의 스트림을 매번 공유할 수 있다면, 스트림을 모르는 공격자는 암호문을 복호화할 수 없습니다. 하지만 평문과 같은 길이의 스트림을 안전하게 공유할 수 있다면, 스트림을 공유하는 채널로 평문을 공유하면 되므로 암호화가 필요하지 않은 환경임을 의미합니다.’ -> 위에서 키를 어떻게 공유하느냐가 핵심이 된다고 말씀드렸죠? 지금 이 문장의 의미는 간단히 말하면 스트림을 ‘매번’ 안전하게 공유할 수 있다면 그 통신망을 이용해서 평문을 보내도 된다는 뜻입니다. 조금 더 구체적으로 말하면, (자 한 번 상상해보세요) 평문과 같은 길이의 스트림을 계속해서 안전하게 공유할 수 있는 채널이 있다는 뜻은 그 채널이 외부 공격으로부터 안전한 채널이라는 뜻입니다. 외부 공격으로부터 안전하고 수신자와 송신자가 안전하게 키를 주고받을 수 있는 채널이라는 뜻이죠. 그렇다고 한다면, 그 채널에서 그냥 키를 주고받지 않고 평문 내용을 서로 주고 받으면 훨씬 안전하고, 생산적이고, 경제적이지 않을까요? 위의 문장은 그냥 그런 의미입니다.
(송신자와 수신자가 평문 길이 만큼의 스트림을 ‘매번’ 공유할 수 있다는 말은 그만큼 랜덤성이 올라간다는 뜻입니다)

질문자님께서 그 다음으로 쓰신 문장은 음… 이 정도 설명을 곁들여서 강의 내용을 다시 읽어보시면 충분히 이해하실 수 있을 거 같아서 말씀드리지 않을게요. 하지만, 정말 충분히 이해하실 수 있습니다. 마음을 가볍게 하시고 천천히 정독하시면 바로 아실 수 있을거에요 한 번 천천히 생각해보세요

3

윗 분께서 잘 설명해 주셨는데 좀만 더 추가하자면, “안전한” 채널은 “일반” 채널에 비해 훨씬 더 느리고 복잡합니다.
안전한 채널로 매번 평문을 주고받을 수 있겠지만, 이렇게 되면 필요 이상으로 리소스가 많이 사용됩니다.
이 때문에 안전한 채널로는 공통된 스트림을 서로 생성하기 위한 짧은 “시드” 만을 공유하고, 일반 채널에서는 스트림으로 평문을 암호화하여 통신하는 방향이 모든 통신을 안전한 채널로 하는 것보다 더 효율적입니다.