2011-02-27 6 views
1

나는 항상 내 사용자의 암호 보안 방법을 찾고 있습니다. 나는 현재 임의의 소금과 해싱 알고리즘의 일부 조합을 사용하고 있습니다.암호화 된 암호를 가장 취약한 암호로 보호하는 방법?

이 문제의 주요한 점은 내 사용자가 매우 약한 암호를 설정했을 때입니다. 혼란스러운 해싱 알고리즘과 소금의 길이에 관계없이 1 년 이내에 금이 갈 수 있다고 생각합니다.

저는 새로운 방식을 생각했습니다. 이전 해시 된 비밀번호에 임의의 소금을 추가하여 사용자가 로그 아웃 할 때마다 비밀번호를 다시 암호화 한 다음 다시 암호화하는 스크립트를 만들었습니다. 따라서 사용자가 돌아올 때마다 암호화 된 암호가 다릅니다. 알 겠어?

그러나이 아이디어의 주요 문제점은 사용자가 로그 아웃 할 때마다 새로운 소금을 저장해야한다는 것입니다. 사용자가 매일 로그인하고 로그 아웃하면 내 코드가 어떻게 생겼는지 상상해보십시오.

아이디어가 있으십니까?

아, 아이디어가 있습니다. 매년 새로운 암호화 된 암호를 다시 생성하는 것은 어떻습니까?

+0

매우 긴 소금을 사용하거나 사람들의 암호에 대한 표준을 시행하기 시작하십시오. – Marcin

답변

0

주요 가정에는 두 가지 문제가 있습니다. 첫 번째는 소금을 저장하는 문제입니다. 이미 소금에 절인 암호 솔루션을 사용하고 있습니다. 새로운 방식으로 소금은 시간이 지남에 따라 변할 것입니다. 따라서이 방법을 사용할 수 있었고 추가 비용은 모든 로그인 (암호 문자열 자체가 실제로있을 때)에서 해시 값을 다시 계산하는 것입니다.

두 번째 문제가 더 중요합니다. 다시 해싱해도 아무 것도 변경되지 않습니다. 공격자가 소금에 절인 해시 값을 확보하자마자 사전 공격을 수행하는 것으로 충분합니다. 데이터베이스에서 소금과 해시를 변경한다고해서 더 이상 어려워지는 것은 아닙니다. 따라서 첫 번째 해시가 만들어지면 해시를 다시 계산할 필요가 없습니다.

+0

예. 그러나 그것은 더 어려울 것입니다 (나는 짐작할 수 있습니다) 문자열이 더 길기 때문입니다. EX – dimassony

+0

그 이유는 알 수 없습니다. 암호는 동일하고 소금은 S1에서 S2로 바뀝니다. 원래 S1, H1 값은 여전히 ​​유효하지만 S2, H2를 DB에 저장합니다. 어떤 끈이 더 길어지고 있는가? – vhallac

+0

알겠습니다. 그래서, 당신은 어떤 생각을 가지고 있습니까? – dimassony

3

다시 암호화하면 문제가 해결되지 않습니다.

당신이 할 수있는 유일한 일은 다중 부분 해시를 생성하고 침입자가 그것들 모두를 얻지 않기를 바랍니다. 나는 보통 2 가지 부분의 소금을 사용합니다 :

하나의 부분은 암호와 함께 데이터베이스에 저장된 사용자 당 임의의 값입니다.

다른 부분은 응용 프로그램 소금입니다. 응용 프로그램 구성이나 OS가 제공하는 특별한 암호 저장소에 저장할 수 있습니다.

공격자가 데이터베이스에 액세스하면 충분하지 않지만 응용 프로그램 소금이 저장되어있는 곳이면 누구나 액세스 할 수 있어야합니다. 예를 들어 데이터베이스를 훔치는 간단한 SQL 인젝션으로는 충분하지 않습니다. 공격자가 코드를 실행할 수 있다면 아마 도움이되지 않을 것입니다.


그리고 해싱 속도를 늦추려면 몇 가지 방법을 사용해야합니다. 일반적인 해시 함수는 빠르므로 무차별 대항력도 빠릅니다. 그러나 해시 함수를 수 백 번 반복하면 여전히 유효한 로그인 속도가 많이 느려지지는 않지만 무차별 대격력은 많이 줄어 듭니다.

PBKDF2와 같은 Password Based Key Derivation Function을 사용하면이를 달성 할 수 있습니다.

+0

알겠습니다. 그래서 아이디어는 최대한 낮은 수위를 늦추는 것입니다. 나는 이것을 시도 할 것이다. – dimassony

+0

그건 두 번째 부분의 아이디어입니다. 물론 합법적 인 로그인을 동일한 요인으로 늦추십시오. 따라서 로그인의 계산 비용과 공격자의 속도 저하 사이의 절충점입니다. 사용자 번호에 따라 서버 응용 프로그램의 경우 약 10ms, 디스크 암호화의 경우 약 1 초가 적당합니다. – CodesInChaos

1

"키 스트레칭"을 사용할 수 있습니다 : 소금 후, 해시를 반복합니다. 그런 다음 해시 값, 염분 및 반복 횟수를 저장합니다. 그런 다음 공격자는 해시를 한 번 수행 할 때보 다 1 초당 백만 번 적은 수의 암호를 확인할 수 있습니다. 그러나 매우 짧은 암호는 계속 떨어질 것입니다. 합법적 인 암호를 확인하려면 동일한 작업을 수행해야합니다. 확인을 위해 1 초의 시간을 수락한다고 가정하면, 공격자는 유사한 기계 (더 많거나 더 빠른 기계를 사용하면 암호 당 1 초!)에서 암호를 확인할 수도 있습니다. 암호 당 약 1 초는 약하고 짧은 암호, 표준 사전 등을 검사하기에 충분할 수 있습니다. 실제로는 더이상 방어하지 않으며 단단하게 만듭니다.

관련 문제