평문으로 암호화 크기 추정

2013. 3. 21. 11:16데이터전환

평문으로 암호화 크기 추정

[가정]

1. 블록 암호화(128 비트) : 블록의 크기 따라 달라짐, 평문이 블록 크기에 맞지 않으면 나머지 비트를 패딩 처리(주의점: 평문의 크기가 128비트(16바이트)인 경우 128를 패딩함)

2. 평문을 블록 크기로 패딩한 후의 크기(암호화 전)와 이를 암호화하여 만든 암호문의 크기는 동일함

   예:) 평문의 크기가 13 바이트 인 경우 비트 수로 13 * 8 = 104 비트이므로 128비트로 맞추기 위해 24비트를 패딩하여 128비트로 맞춘 후 암호화를 하면 암호문의 크기는 128 비트임

 

[base64 엔코딩]

1. 입력비트열을 64개의 printable character로 값을 표현하기 위해 6비트로 나눈 후 64개의 문자로 매핑

2. base64 엔코딩의 비트 수를 3으로 나눈 나머지만큼 '=' 문자를 엔코딩 후 패딩함

예:) 128 비트 base64 엔코딩 

      1. 128 비트를 6비트로 나누어 정렬 6비트로 나누어 떨어지지 않는 경우 나머지 만큼 비트를 패딩함

          128  = 21 * 6 + 2 ==> 4비트를 패딩하여 22 바이트로 표현

      2. 128 = 3 * 42 + 2 (3으로 나눈 나머지가 2이므로) 두 개의 '=' 문자를 뒤에 패딩

      3. 128 비트는 24 바이트로 암호화하여 DB에 저장함

 

[암호화 크기 추정 SQL ]

 select
  rnum as "바이트 수"
, rnum * 8 as "비트 수"
, (floor(rnum*8/128)+1)*128 as "패딩 후 비트 수"
, ceil((floor(rnum*8/128)+1)*128/6) + mod((floor(rnum*8/128)+1)*128,3) as "base64 바이트 "
from (
select rownum as rnum
from all_objects
where 1=1
and rownum <= 20
) a
where 1=1
order by a.rnum
;

 

 [암호화 크기 추정 값]

평문 바이트 수

평문 비트 수

패딩 후 평문 비트 수

base64 바이트 수

1

8

128

24

2

16

128

24

3

24

128

24

4

32

128

24

5

40

128

24

6

48

128

24

7

56

128

24

8

64

128

24

9

72

128

24

10

80

128

24

11

88

128

24

12

96

128

24

13

104

128

24

14

112

128

24

15

120

128

24

16

128

256

44

17

136

256

44

18

144

256

44

19

152

256

44

20

160

256

44

 

[활용]

개인정보, 회사의 기밀을 DB에 암호화하여 저장할 경우

해당 컬럼의 max 길이(한글포함하는 경우 lengthb)를 구한 다음 위 추정식을 이용하여 테이블의 컬럼 크기를 조정하는데 사용