bcrypt 요약짤

bycrpt는 blowfish 알고리즘을 이용합니다. 다른 점은 salt로 레인보우 테이블을 방지합니다. 그리고 

의도적으로  암호화 횟수(cost)를 늘려서 무차별 공격을 더디게 합니다. 

 

[P box, S box 초기화 (키 스케줄) ]

1) P, S박스 초기화 및 할당을 위해 EksblowFishSetup() 함수를 실행한다.

    a) 16진수 파이로 P, S 박스를 초기화 한다.

    

2) P, S박스 할당을 위해 ExpandKey() 함수를 실행한다.

    a) P[0] = P[0] xor password[0] 부터 P[17] = P[17] xor password[17] 까지 한다.   

    b) salt를 절반(64비트)으로 나눈다.

    c) block을 0(64비트)로 초기화 한다.

   

2-1) 아래는 P박스 할당을 위한 작업입니다. 첫번째 반복위주로 설명하겠습니다

   a) block = block xor saltHalf[0] // 현재 block은 0이라서 saltHalf와 xor하면 결과값은 salt입니다 

   b) block = encrypt(state, salt) //  P박스(비밀번호와 xor한 P), S박스(파이로 초기화한 S)를 사용해 salt를 blowfish

                                                      방식으로 암호화합니다. 이때 salt가 평문역할을 합니다.

  c) p[0] = block[0..31] , p[1] = block[32..63] // block(암호화 마침)을 절반씩 p배열에 할당합니다.

  두번째 반복의 block은 첫번째 반복에서 암호화한 block입니다.  이런식으로 p[18] 까지 할당합니다.

 

3) S박스 할당 차례입니다. P박스 할당과  과정이 동일합니다. 눈 여겨볼점은 첫번째 반복의 block입니다.

    이 block은 P박스 마지막 할당때 암호화한 block 입니다. 

 

4) ExpandKey(state, 0, password), ExpandKey(state, 0, salt)를 2^cost 만큼 반복한다. 

 

    4-1) ExpandKey(state, 0, password)

          a) ExpandKey(state, 0, password)의 매개변수는 step3에서 할당한 state,  0(salt), password(key) 이다.

          b) P[0] = P[0] xor password[0] 부터 P[17] = P[17] xor password[17] 까지 한다.   

          c) 첫번째 반복의 block은 block(0) xor salt(0)로 0이다

        

    4-2) ExpandKey(state, 0, salt)

         a)  ExpandKey(state, 0, salt)의 매개변수는 step4-1에서 할당한 state,  0(salt), salt (key) 이다.

         b)  P[0] = P[0] xor salt[0] 부터 P[17] = P[17] xor salt 17] 까지 한다 //salt는 128비트라 모자라 순환해서 사용합니다

          c) 첫번째 반복의 block은 block(0) xor salt(0)로 0이다

 

[암호화]

1)  step 4-2에서 할당한 state로 ctext(평문)을 64번 암호화한다.

 

2) $2a $cost $salt $ctext 형태로 합쳐 반환합니다. 

$2a$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
  • $1: MD5-based crypt ('md5crypt')
  • $2: Blowfish-based crypt ('bcrypt')
  • $5: SHA-256-based crypt ('sha256crypt')

[페이스텔 네트워크 (암호화 방법) ]

blowfish의 페이스텔 네트워크와 동일합니다.

*여기서 blowifsh 보세요

 

출처1(위키페디아) & 출처2(usenix) & 출처3(usenix)

'알고리즘' 카테고리의 다른 글

[대칭 키] blowfish 알고리즘  (0) 2023.10.04
[대칭 키] DES 알고리즘  (0) 2023.09.26

+ Recent posts