2011-08-30 4 views
1

우리 모델의 개체를 식별하기 위해 고유 한 64 비트 키 (의사) - 무작위로 생성하고 싶습니다. 시스템의 모든 사용자에 대해 가능한 한 고유 한 키 (모든 N 키가 함께 사용될 때 충돌 가능성을 최소화해야 함)가 필요합니다.고유 한 64 비트 키를 생성하는 방법

우리는 데이터가 저렴하기 때문에 일반적인 GUID는 현재 의문입니다. 동일한 컨텍스트에서 1 백만 개 이상의 키가 필요하다고 예상하지 않기 때문에 64 비트이면 충분하다고 생각할 수 있습니다 (충돌 확률은 ~ 10e-7 정도).

부수적으로, 나는 또한 잘 분산/고유해야 할 단일 64 비트 키로 해당 키의 튜플을 폴드/해시하는 체계가 필요합니다.

어쨌든 좋은 (잘 분산 된) 해시 함수가 필요하므로 반으로 GUID를 배율 할 수 있습니까 (GUID의 고정 비트를 어떻게 든 계산할 수 있습니다)? 아니면 로컬 RNG를 사용하는 것이 더 낫습니까? 우주/세대 간의 독특함을 극대화하기 위해 RNG를 어떻게 뿌릴까요? 어떻게 강한 RNG가 필요한가요?

저는 효율성 (한 점까지)을 특별히 찾고 있지는 않지만 확률이 그들의 약속을 지키고 있는지 확인하고 싶습니다.

답변

2

은 md5와 같은 빠른 128 비트 암호화 해시를 사용하여 카운터를 해시 한 다음 두 개로 나눕니다. 그것은 당신에게 각각 64 비트 인 독립적 인 값을 "무작위로"줄 것이며 매우 효율적이어야합니다.

간단한 카운터를 사용할 수 없습니까?

업데이트 분산 솔루션이 필요한 경우 각 컴퓨터에 카운터를 놓고 컴퓨터의 MAC 주소와 카운터를 해시하면됩니다. 더 나은 처리량을 위해 각기 다른 이름 (A, B 등)을 가진 기계마다 여러 카운터를 사용하고 이름을 해시합니다. 이것은 해시를 사용하면 큰 이점입니다. 아무 것도 던질 수 있습니다. 모호함이 없도록주의하십시오 (예 : "-"를 해쉬 한 것의 사이에 넣으십시오. "1"의 수와 "23"의 수를 "12"의 이름과 개수와 혼동하지 마십시오. "삼").

+0

우리는 현재 독창성을 보장하는 32 비트 키의 범위를 배포하는 서버를 보유하고 있지만 이러한 종류의 간단한 카운터를 사용하면 피하기 위해 노력하고 있습니다 (단일 지점 오류, 연결 문제). – fparadis2

+0

카운터 대신 이전 ID를 사용할 수 있습니다. 이렇게하면 각 MD5가 두 가지를 제공하기 때문에 많은 "독립적 인"카운터를 가질 수 있습니다. – Rotsor

+0

또는 다른 출처에 대한 접두사가 있어야합니다. 일단 해시를 사용하면 선택 사항은 끝이 없습니다. 예를 들어, 각 컴퓨터는 MAC 주소와 카운터 등을 해시 할 수 있습니다. –

관련 문제