2014-03-05 5 views
0

입니다. 따라서 다음과 같은 방법으로 암호를 생성하는 것은 좋지 않습니다. 나는 그것이 엔트로피의 약간 (아마 5 정도 정도의) 비트만을 가지고 있다고 말하고 싶지만, 나는 그것을 정확하게 계산할 수 없다.이 방법으로 생성 된 엔트로피 암호의 수 (또는 약간)는

오라클의 JDK 7을 사용하여 다음과 같은 방법으로 생성 된 길이 n의 암호를 추측하는 데 필요한 평균 시도를 계산하는 방법을 보여줄 수 있습니까? 반올림

  • , - (혼란 보이는 문자를 제한하기위한 5 62), 문자 클래스 다음 문자를 선택
  • 두 단계 과정

    • 알파벳 크기 :

      나는 관련 요인은 가정 정수,
    • Math.random() 본질 속성
    • 문자를 샘플링하는 try-until-succeed 방법입니다.

    하지만 정확한 숫자를 얻을 수 없습니다. Math.random() 예측할이라고 가정

    char[] generate(int n) { 
        char[] pw = new char[n]; 
        for (int i = 0; i < n; i++) { 
         int c; 
         while (true) { 
          c = randomCharacter(c); 
          if (c == '0' || c == 'O' || c == 'I' || c == '1' || c == 'l') 
           continue; 
          else 
           break; 
         } 
         pw[i] = (char) c; 
        } 
        return pw; 
    } 
    
    int randomCharacter(int c) { 
        switch ((int) (Math.random() * 3)) { 
        case 0: 
         c = '0' + (int) (Math.random() * 10); 
         break; 
        case 1: 
         c = 'a' + (int) (Math.random() * 26); 
         break; 
        case 2: 
         c = 'A' + (int) (Math.random() * 26); 
         break; 
        } 
        return c; 
    } 
    
  • +1

    'Math.random'의 고유 속성은 구현에 따라 다릅니다. 당신은 하나를 지정하지 않았습니다. 당신도 언어를 지정하지 않았다 (자바). – CodesInChaos

    +0

    좋은 지적으로, 나는 태그 한도를 사용하여 다른 곳에 언급하는 것을 잊어 버렸다. –

    답변

    1

    상기 randomCharacter 함수 반환되는 특정 숫자의 확률 1/3 * 1/10이며, 편지의 1/3 * 1/52.

    pw 배열의 항목의 경우 일부 문자가 유효하지 않으므로 남은 문자의 확률이 높아집니다. 합계가 다시 1이되도록 (즉, 남은 확률의 합으로 나눠) 확률을 다시 조정해야합니다. 그 결과 숫자는 확률이 1/3 * 1/10/(8 * 1/3 * 1/10 + 47 * 1/3 * 1/52)이고 문자는 1/3 * 1/52/(8 * 1/3 * 1/10 + 47 * 1/3 * 1/52)입니다.

    Shannon 엔트로피의 공식에이 모든 값을 연결하면 문자 당 약 5.7 비트의 엔트로피 결과를 얻을 수 있습니다.

    유효한 57 자의 단일 배열을 사용하고 단일 임의 번호를 사용하여 색인을 생성하는 경우 문자 당 약 5.8 비트의 엔트로피가 발생합니다.

    +0

    Math.random()이 PRNG 일 뿐이며 이상적으로 예측할 수없는 경우에도 계속 유지됩니까? 나는 일반적으로 PRNG가 한 문자를 얻기 위해 여러 번 호출하면 엔트로피를 줄일 수 있다고 생각했습니다. –

    +0

    PRNG가 예측 가능한 경우 공격자가 암호를 예측할 수 있으므로이 경우 엔트로피는 0입니다. –

    +0

    PRNG 출력이 이전 값과 완전히 독립적이지는 않습니다. 효과 있음. 두 번째 글자 배포는 첫 번째 글자에 의존적입니다. (일반적으로 암호화 PRNG를 사용하고자하는 이유입니다.) 이것은 분명히 엔트로피를 줄이지 만, 어떻게 정량화 할 수 있습니까? –