2016-08-16 2 views
0

암호로 임의로 생성 된 문자열을 암호로 보호하고 구분 기호와 사용자의 사용자 ID를 추가하여 세션 ID로 사용한다고 가정 해 보겠습니다. 유스 케이스는 충돌을 방지하는 것입니다. 이렇게하면 무작위로 생성 된 문자열을 사용한 것보다 내 시스템이 안전하지 않을 수 있습니까?세션 ID에 사용자 ID를 추가하는 것이 안전하지 않습니까?

+1

나는이 질문이 http://security.stackexchange.com/에 적합 할 것이라고 생각한다. – Derek

답변

1

의 두 가정에 대한 답을 분할하자 : 당신은 이미 다른 방식으로 (등 다른 분야, 다른 쿠키를) 사용자 ID를 전송하는 경우

하고 세션 ID에 액세스 할 수있는 공격자 볼 것 사용자의 접근 방식은 구현에 공격 표면을 추가하지 않으며 따라서 위험도 동일하게 유지됩니다.

사용자 ID가 전송되지 않으면 공격자가 다른 공격에서 악용 될 수있는 추가 정보를 제공하게됩니다. 이것이 얼마나 위험한지는 응용 프로그램에서 사용자 ID의 중요성에 달려 있습니다.

마지막으로, 나는 귀하의 추론에 대해 걱정하고 있습니다. 합리적으로 수학적으로 충돌 할 가능성이있는 경우 세션 ID는 사용하려는 목적에 맞지 않습니다. 안전 측면에서 오류가 발생합니다.

0

충돌이 위험한 경우 세션 식별자에 거의 엔트로피가 포함되지 않습니다. OWASP Session Management Cheat Sheet에서

: 64 비트의 엔트로피와 세션 ID를 사용하는 경우

, 성공적으로 유효한 세션 ID를 추측 적어도 2백92년 공격자를 취할 것입니다, 공격자를 가정하고 시도 할 수 있습니다 세션 식별자가 성공적으로 시도조차하지 않고 추측 할 수 있다면 웹 애플리케이션

에서 사용할 수있는 10 만 개 유효 동시 세션 초당 10,000 추측은 그래서, 당신은 더 큰 문제가있다. 시스템 자체가 충돌하는 식별자를 생성하는 경우 엔트로피 소스를 긴급히 검토해야합니다.

질문에 대답하기 위해 사용자 ID를 도입 할 위험은 세션 식별자가 유출 된 경우 공격자가 수분이 많은 식별자를 즉시 ​​식별 할 수 있다는 것입니다. 즉, 관리자 또는 루트 계정의 계정입니다. 또한 코드를 추가 할 때 응용 프로그램의 복잡성이 증가합니다. 보안은 응용 프로그램이 직면 한 위험을 해결할 수있는 최대한 단순하게 유지 될 때 가장 좋습니다. 또한 여분의 코드는 더 많은 공격 영역과 구현 취약점의 추가 가능성을 의미합니다.

요약하면 세션 식별자의 엔트로피가 64 비트 이상이고 엔트로피 소스가 양호해야합니다 (예 : PRNG가 아닌 CSPRNG를 사용하거나 애플리케이션 고유의 엔트로피 소스 사용).

관련 문제