2014-06-06 1 views

답변

11

맛이 1, 256 또는 512가 아닌 단일 해시 계산을 병렬 처리하는 것에 대해 궁금한 점이 있다면 대답은 슬프게도 아니오입니다. 이는 SHA 변환 함수가 정의 된 방식 때문입니다. 고정 크기의 블록에서 작동하지만 각 블록의 변환 결과는 다음에 필요하므로 계산을 병렬로 실행할 수 없습니다.

분명히 다른 입력 문자열에 대해 여러 개의 해시를 병렬로 실행할 수 있지만 이미 알고 있다고 가정합니다.

기본 SHA 변환을 사용하여 큰 입력에 대한 다이제스트를 생성하려는 경우 입력을 세그먼트 화하고 각 세그먼트의 다이제스트 블록을 병렬로 생성하기위한 임의의 체계를 정의 할 수 있습니다. 그렇다면이 같은 사람 등등 ..

뭔가를 결합 : 당신은 병렬 H(b0), H(b1), .. H(bn)를 생성 할 수 있습니다

| ------------------ large input ---------------------------------------------| 

| b0  | b1 | b2 |   |   |   | bn | 

.

그런 다음, 생성 H_OUT = H(H(b0) + H(b1) + .. + H(bn))은 (어디 + 기호 연결 또는 간단한 XOR이 될 수 있지만, 이들은 것 가능성 하지 강력한 암호 수).

이 방법은 여러 코어의 이점을 얻을 수 있지만 H_OUT은 원래의 큰 입력의 단일 해시를 계산하는 것과 동일하지 않습니다.

+1

여기서 XOR을 사용하면 매우 나쁩니다. 해커는 두 블록을 서로 바꿔서 동일한 해시로 손상된 파일을 만들거나 파일에 복제 된 블록이 있으면 두 블록을 모두 변경하고 여전히 동일한 해시를 얻을 수 있습니다. XOR을 사용한다면 H (bn) 대신에 H (bn xor n) 같은 것을해야합니다. – Runemoro

+0

예, 단순 XOR이 암호화에 적합하지 않다는 것은 옳습니다. 답변을 업데이트했습니다. –

관련 문제