2012-12-06 4 views
1

입력에 관계없이 일정 길이의 출력을 보장 할 수 있습니까?암호화 된 문자열의 길이를 제어하는 ​​방법은 무엇입니까?

예를 들어, String을 전달하고 해당 암호화 된 동등 물이 45자를 포함하고 있음을 보증하고 싶습니다. 그 45 문자는 입력이 원더 랜드의 앨리스의 1 문자인지 여부에 관계없이 거기에 있어야합니다.

: - 그것은 가능하지 않다 (45)는 분명히 예입니다, 요점은 출력 문자의 수는

+0

궁금합니다. 왜 정확히 암호문의 크기를 제어하려고합니까? 너 뭐하려고? –

+0

초 단위로 질문을 업데이트 할 것입니다. – JAM

+0

답변을 입력하는 동안 어려운 요구 사항이 아니라는 것을 깨달았습니다. 항상 말로 번역하는 데 도움이됩니다. – JAM

답변

3

(5 정확한 수, 또는 나눌, 또는) 어떤 방법으로 조절되지 않아야 없음입니다 고정 된 결과 길이를 지정합니다. 데이터가 충분히 길다면 고정 된 짧은 임의의 길이로 암호화 할 수 없습니다 (놀라운 압축). 가능하다면 그 성질의 hash을 고안하는 것이 가능할 것입니다. 그러나 해시는 다릅니다 (한 가지 방법으로 해시에서 원본 데이터를 추출 할 수 없음).

그러나 패딩을 사용하여 길이를 제어 할 수는 있습니다.

+0

예,이게 의심 스럽네요. 내부적으로 해시 요소를 조사하고 조회 테이블을 유지할 수 있습니다. – JAM

+0

해시가 상당히 고유하다면 작동 할 수 있습니다. 항상 충돌의 가능성이 있습니다. 그러나 해시가 상당히 크면 확률이 매우 낮아질 수 있습니다. –

+0

감사 마크. 확인을 듣기 좋습니다. – JAM

2

한계를 "충분히 높게"설정하면 예를 들어 패딩과 스트림 암호를 사용하여 원하는대로 쉽게 할 수 있습니다. http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29

당신이 임의의 IV를 사용의 시작 부분에 삽입하는 경우, CTR 모드에서 AES-128을 사용 :

는 예를 들어, 블록 암호의 작업의 CTR (카운터) 모드에서보세요 암호 텍스트의 경우, 암호 텍스트의 크기는 정확히 16 바이트 + 일반 텍스트의 크기가됩니다. 따라서 암호문 길이를 100 바이트로 수정하면 최대 84 바이트의 일반 텍스트를 암호화 할 수 있습니다. 짧은 일반 텍스트는 덧붙여 야합니다. 예를 들어 ASCII 텍스트를 암호화하는 경우 문자열 끝에있는 마커로 0x00 바이트를 사용할 수 있습니다 (C의 "null-terminated strings"와 동일). 그런 다음 84 자까지 무작위로 가비지를 덧붙입니다. 바이트. http://en.wikipedia.org/wiki/Padding_(cryptography)

난 그냥 또 다른 가능성에 대해 생각 :

당신이 사용할 수있는 많은, 많은 다른 일반적인 패딩 계획을 수 있습니다 당신은 갈루아/카운터 모드 (GCM) 등의 인증 암호화의 어떤 종류를 사용할 수 있습니다. 임의의 IV를 암호 텍스트와 연결하고 임의의 바이트를 사용하여 원하는 크기로 채 웁니다. 그런 다음 해독하려면 암호 텍스트의 모든 하위 문자열을 시도하십시오. 올바른 하위 문자열이 있으면 해독 알고리즘이 일반 텍스트를 출력합니다. 그렇지 않으면 "오류"가 출력됩니다. 이 방법을 사용하면 스키마에 타이밍 공격을 도입 할 수 있으며 일반 텍스트의 크기가 큰 경우 암호문을 해독하는 데 많은 계산 작업을 수행 할 수 있습니다.

어쨌든 공격 가능성을 간과하기가 쉽기 때문에 암호 전문가 (예 : 계획을 수립 한 후 https://crypto.stackexchange.com/)에 대해 귀하의 계획을 검토해야합니다.

+0

패딩을 사용하고 암호화 된 문자열을 안정적으로 리버스 엔지니어링 할 수있는 권장 구현이 있습니까? – JAM

+0

"암호화 된 문자열 리버스 엔지니어링"이란 정확히 무엇을 의미합니까? –

+0

감사합니다. 훌륭한 응답 – JAM

관련 문제