2016-10-28 6 views
0

현재 클라이언트 쪽 javascript에서 암호를 전달한 diceware를 생성합니다 (각 클라이언트는 암호로 안전한 의사 임의 시드를 얻음). Diceware 암호 클라이언트 쪽을 생성하는 것이 안전합니다

var password = this.word() + this.separtor() + this.word() + this.separtor() + this.word(); 

는 암호 내 관심사는 공격자가 나에 대해 내 발전기를 사용하지 단순히 무력 문자 조합을 사용하여 암호를하지만 실제로, 내가 찾을 수있는 모든 힘 테스터를 통과 발생하지만.

단어() 그래서 발생기 만 * 1,296 = 2,176,782,336 조합 1,296 * 1,296 생산에만 6^4 = 1,296 조합

있다.

나는 seperators (24 개 조합) 1296 * 24 * 1296 * 24 * 1296 = 1,253,826,625,536

는 CGI 제한 사용자 시도를 추가하지만 항상 공격자가 암호를 가질 수있다 오프라인 해시.

비밀번호 서버 측을 생성하는 것은 단어 목록을 컴파일하는 것만 큼 안전하며, 적어도 암호 해시가있는 공격자는 검색하기가 상대적으로 쉽습니다.

암호가 기억하기 쉽도록 암호문에 임의의 특수 문자를 임의로 추가하고 싶지는 않지만 공격자가 모든 문자 조합을 시도하도록 강요합니까?

p.s보다 적합한 경우 암호화로 이동하십시오.

답변

0

비밀번호를 잊어 버릴 수 없도록하려면 five사전 단어를 공백으로 구분하거나 전혀 구분하지 않아야합니다.

또한 공격자가 알고리즘 및 단어 목록을 알고 있다고 가정해야합니다.

10000 단어의 단어 목록 (8 세의 네이티브 영어 사용자의 average vocabulary)을 사용하면 10000^5 = 10^20 조합이됩니다.

평균 온라인 환경에서 초당 약 1000 개의 암호를 예상 할 수 있습니다. 이는 해커에 대해 수십억 년의 운동을 제공합니다. 이것은 수십억 년에 걸친 오프라인 공격과 같습니다.