2012-05-17 5 views
3

GUID가 이론적으로 고유하므로 충돌 가능성이 매우 낮습니다. 그러나 제대로 알고 있으면 일부 고유성은 사용중인 알고리즘에 따라 생성하는 데 사용 된 컴퓨터의 정보에서 파생되기 때문에 사용할 수 있습니다.NewID() - 이전/다음 GUID가 노출 될 가능성이 높음

주어진 GUID가 사용자가 테이블의 다른 GUID를 추측 할 가능성이 얼마나 큽니까? 당신이 구독 취소 기능을 뉴스 레터 가입자가있는 경우

는 예를 들어, 당신은 그냥이 분명 나쁜 생각 정수 ID로} example.com/subscriber/unsubscribe/{id하는

를 게시있을 수 있습니다. ID가 1000 인 사용자는 ID를 추측하여 전체 데이터베이스를 수 초 내에 가입을 취소 할 수 있습니다.

ID 열이 newid()로 초기화 된 GUID 인 경우 사용자가 올바른 ID를 알면 올바른 ID를 추측 할 가능성이 얼마나 높습니까?

+1

귀하의 우려 사항은 매우 유효합니다. http://blogs.msdn.com/b/ericlippert/archive/tags/guids/ – SLaks

답변

3

나는 이론 상으로는 가능할 수도 있지만, 실제로 일어날 가능성은 매우 낮습니다.

에릭 Lippert의의 블로그 SLaks 그의 코멘트에 링크 된 게시물 및 스택 오버플로 다른 답변 읽었습니다 : 지금까지 내가 그것을 이해

을 주어진 GUID가 몇 개인 경우 동일한 컴퓨터에서 생성되었는지 확인할 수 있습니다. 그러나 쉽게 찾아 낼 수는 없으며 일반 사용자에게는 그렇지 않습니다.

지금 나는 단지 하나 GUID (예에서 뉴스 레터 구독 ID)를 부여 추측, 그것은 것입니다 매우 다른 GUID를 추측하기 어렵다.
실제로 가능한 경우에만 (그리고 경우에 따라) GUID를 만드는 데 사용되는 알고리즘에 대한 빠른 머신과 심층적 인 지식이 필요합니다.

마지막으로, 당신은 상황을보고해야합니다 : GUID를 추측 할 수있다하더라도
을 (그리고 나는 그것이 정말 모르겠어요 - 나는 내가 그것을 할 수 없다는 것을 확신) , 나는 누군가가 당신의 회보에서 다른 사람들을 구독 취소하기 위하여 진짜로 이것을 할 것이라는 점을 상상할 수 없다.

2

NEWID()는 버전 4 GUID를 생성하지만 구현은 이라고 추정 할 수 있습니다.입니다. 은 RFC 4122 사양에서

GUIDs are designed to be unique, not random. :

보안 고려 사항

UUID를 추측하기 어려운 가정하지 마십시오 예를 들어, 보안 기능 (단순 소유로
액세스 권한을 부여하는 식별자)으로 을 사용해서는 안됩니다. 예측 가능한 난수 소스는
으로 악화됩니다.마틴 스미스 @로

은 GUID 그것은 본질적으로는 구현에 따라 달라 추측하지 않는 버전 4 불만 이유만으로 지적했다.

SELECT CAST(CRYPT_GEN_RANDOM(16) AS UNIQUEIDENTIFIER) 

참고 :

+1

을 참조하십시오. "모든 구현에서 추측 할 수 없다고 가정하지 마십시오"와 "버전 4의 지침을 생성하는 모든 구현은 다음과 같습니다. guessable " –

+0

좋은 점 NEWID()는 추측 할 수 있으며 IMO를 사용해서는 안됩니다. 하지만 추측 할 수없는 버전 4 complaint GUID를 만들 수 있습니다. 내 대답을 분명하게 바꾸었다. – DalSoft