2010-01-06 4 views
3

그래서 게임을위한 웹 사이트를 만들고 있습니다. 인기가있을만한 것은 없습니다 : P소금으로 계정 이름 사용하기

지금 암호 보안에 대해 생각하고 있습니다. 계정 테이블에 새 열을 추가하는 대신 소금을 사용하지만 계정 이름을 소금으로 사용하려고 생각하고 있습니다. 캔트가 변경 될 수 있으며 "고유"합니다. 나는 2 명의 사용자가 동일한 계정 이름을 가질 수 없다는 것을 의미합니다.

그러나 나는 누군가가 계정 이름 바나나를 가지고 있다고 말하는 경우 얼마나 안전 할 지 생각하고있었습니다. 나는이 단어 목록 해커가 사용하는 단어가 인기가 있어야 함을 의미합니다.

계정 이름이 바나나이고 비밀번호가 안녕하세요 (sha1로 해시 됨)라고 말하면 쉽게 바꿀 수 있습니까?

답변

3

아니요, 표준 관행을 따르고 사용자별로 새로운 고유의 소금을 생성하고 데이터베이스의 다른 필드 옆에 바로 저장하면됩니다.

+0

예. 그게 가장 좋을 것 같아. –

0

위험은 없습니다. 사용자 이름은 공개 지식입니다. 그리고 해시는 결코 뒤집기가 쉽지 않습니다. 이것이 바로 해시의 핵심입니다.

사전 공격은 암호 복잡성 정책을 사용하여 사전 공격으로부터 보호합니다.

편집 : 네, 무지개 공격을 막기 위해 길고 임의의 문자열을 앞에 붙입니다. SHA1 ("whooooohooomysitehebest_bananahello")은 무지개 테이블에있을 가능성이 없습니다.

+0

"공공 지식"이란 무엇입니까? 계정 이름은 다른 사람들을 위해 사이트의 아무 곳에도 표시되지 않습니다. 단지 로그인 용으로 사용됩니다. –

+0

호세, 잠재적 인 공격자는 모든 종류의 암호 해독 공격을 시작하기 위해 유효한 사용자 이름을 알아야합니다. –

+0

@Jose : 패스워드를 해싱하려는 생각은 공격자가 사용자 테이블에서 손을 떼고 모든 사용자 이름을 볼 수 있다는 것입니다. –

0

소금을 사용하지 않는 것이 좋지만 무작위 소금만큼 안전하지는 않습니다.

0

적어도 계산식으로 사용자 이름 대신 소금을 알아야합니다. 해시가 뒤집기 쉽지는 않지만 무차별 공격으로부터 자신을 보호하고 싶습니다. un-permuted 사용자 이름을 소금으로 사용하면 사전 공격으로 쉽게 깨지게됩니다.

1

해커는 무지개 테이블에서 sha 다이제스트를 검색하여 'bananahello'입력이 이미 입력 된 'bananahello'와 일치 함을 알 수 있습니다 (차량용 레인보우 테이블에 이미 있음). 그는 사용자 이름이 '바나나'라는 것을 알 수 있습니다. 암호는 '안녕하세요'입니다.

나는 해시 : sha1 (사용자 이름. 영역 암호)과 비슷한 것을 해시합니다. 이제 귀하의 영역 ('example.com')에 맞게 조정 된 무지개 테이블이 와서 꽤 어려워합니다. Side benfit은 사이트에서 다이제스트 인증을 실제로 구현할 수 있다는 것을 의미합니다. 이는 Basic 및 양식보다 훨씬 더 낫습니다.

+0

SHA1을 사용하지 마십시오. 현재 너무 약한 것으로 간주됩니다. http://valerieaurora.org/hash.html –

+0

SHA1을 사용해도됩니다. –

0

소금물로 처리하면 사전 계산 된 공격을 막을 수 있습니다. 이미 계산 된 사전 소금으로 무지개 테이블을 만들 수도 있습니다. 그리고 그것은 여전히 ​​전통적인 bruteforcing을 막지는 못하며, 이는 Remus의 "bananahello"예제를 꽤 빨리 건너 뜁니다.

public usernames verbatim을 사용하면 소금 값을 제거 했으므로 알려진 소금에 대한 무지개 테이블을 계산하는 것이 유일한 작업입니다. 귀하의 질문에 대답하기 위해 귀하의 구현은 쉽게 되돌릴 수 있습니다 (그러나 빠를 수는 없습니다).

+0

내가 사용자 테이블의 복사본을 훔쳐서 소금이 그 테이블에있는 열로 저장된다면 그 계정 이름이 소금 인 테이블을 훔치는 것과 다른 점은 무엇일까요? 고유 한 사용자 이름이 무작위 소금 (소금이 사용자 데이터와 함께 저장되는 경우)만큼 좋다고 주장합니다. – Eric

관련 문제