홈페이지 : http://www.oche.de/~akupries/soft/trfcrypt/index.html
TrfCrypt는 각종의 암호화/복호화 루틴을 Tcl 커맨드로 추가한 확장 패키지입니다. 앞서 강좌를 했던 Trf를 개발했던 개발자가 개발한 것으로, 군사전용으로 사용가능한 소프트웨어 기술입니다. 이는 일부의 루틴이 미국 수출규제에 어긋나기 때문에, Trf와 별도로 배포되고 있습니다. TrfCrypt가 지원하는 암호화 루틴은 다음과 같습니다.
- DES
- IDEA (International Data Encryption Algorithm)
- Blowfish
- RC2
- RC4
- ROT (이른바 시저 암호)
- SAFER (Secure And Fast Encryption Routine)
DES, RC2는 Eric Young에 의해 개발되고 있는 SSLeay라고 하는 SSL 암호화 루틴 라이브러리가 필요합니다. 자세한 것은 배포기록 문서를 보시면 됩니다. 다른 5개의 루틴은 외부라이브러리가 필요하지 않습니다.
사용방법
여기서는 IDEA,Blowfish,SAFER,RC4,ROT의 사용방법을 알아보겠습니다. 커맨드의 이름은 다음과 같습니다.
- safer (SAFER)
- idea (IDEA)
- rot (ROT)
- blowfish (BLOWFISH)
- rc4 (RC4)
IDEA
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "Hello, Trf World."
set s "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff"
set iv "\x00\x00\x00\x00\x00\x00\x00\x01"
puts "****** checking IDEA -mode ecb *******"
set a1 [idea -dir encrypt -mode ecb -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode ecb -key $key $a1]
puts "------ decode ------"
puts $a2
puts "****** checking IDEA -mode cbc *******"
set a1 [idea -dir encrypt -mode cbc -key $key -iv $iv $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode cbc -key $key -iv $iv $a1]
puts "------ decode ------"
puts $a2
puts "****** checking IDEA -mode cfb *******"
set a1 [idea -dir encrypt -mode cfb -key $key -iv $iv -shift 1 $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode cfb -key $key -iv $iv -shift 1 $a1]
puts "------ decode ------"
puts $a2
puts "****** checking IDEA -mode ofb *******"
set a1 [idea -dir encrypt -mode ofb -key $key -iv $iv -shift 1 $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode ofb -key $key -iv $iv -shift 1 $a1]
puts "------ decode ------"
puts $a2
IDEA의 커맨드 이름은 idea로, 암호화시는 -direction encrypt, 복호화 시는 -direction decrypt라고 지정합니다. 입력 문자열은 끝에 지정하지만, 길이(바이트수)는 반드시 8의 배수여야 합니다. -key옵션의 인자는 암호화, 복호화키로 IDEA의 경우는 16바이트가 필요합니다.(16바이트가 아니면 에러가 나며, 그 이상은 에러가 나질 않습니다.) 다음은 -mode, -iv, -shift입니다. -mode는 각각 블록 암호화 할 때의 블록 방법을 나타내는 모드이고, -iv는 초기화 팩터(factor)를 나타내는 8바이트의 문자열, -shift는 피드백(feedback) 레지스터의 시프트 바이트를 나타냅니다. -mode에는 ecb, cbc, cfb, ofb의 4종류가 있습니다. -mode가 ecb 이외 일 때에는 -iv 옵션에 8바이트의 문자열을 지정할 필요가 있습니다. -mode가 cfb 또는 ofb의 경우는, -shift옵션에 시프트 바이트를 적당하게(예로 1) 지정할 필요가 있습니다.
Blowfish
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "Hello, This is Blowfish."
set s "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff"
set iv "\x00\x00\x00\x00\x00\x00\x00\x01"
puts "****** checking BLOWFISH -mode ecb *******"
set a1 [blowfish -dir encrypt -mode ecb -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [blowfish -dir decrypt -mode ecb -key $key $a1]
puts "------ decode ------"
puts $a2
Blowfish의 커맨드 이름은 blowfish로 사용방법은 대부분 idea와 같습니다. 키를 1-56바이트 사이에서 자유롭게 지정할 수 있다는 점이 다릅니다.
SAFER
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "safer key."
set s "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff"
set iv "\x00\x00\x00\x00\x00\x00\x00\x01"
puts "****** checking SAFER -mode ecb *******"
set a1 [safer -dir encrypt -mode ecb -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [safer -dir decrypt -mode ecb -key $key $a1]
puts "------ decode ------"
puts $a2
SAFER(Secure And Fast Encryption Routine)의 커맨드 이름은 safer로, 사용 방법은 IDEA, Blowfish와 거의 동일합니다. 키의 길이는 8~16바이트 내에서 자유롭게 지정할 수 있습니다.
RC4
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "rc4rc4"
set s "example input text of encryption algorithm 'RC4'."
puts "****** checking RC4 *******"
set a1 [rc4 -dir encrypt -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [rc4 -dir decrypt -key $key $a1]
puts "------ decode ------"
puts $a2
RC4의 커맨드 이름은 rc4로, RC4의 경우는 -mode, -iv, -shift 를 사용할 수 없으며 암호화 구분문자, 복호화 구분문자, 암호화키, 입력 문자만 지정할 수 있습니다. 입력 문자열의 길이에도 8의 배수라는 제한이 없으며, 키의 길이도 1~256 바이트 사이에서 자유롭게 지정할 수 있습니다.
ROT
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set s "example input text for encryption algorithm 'ROT'."
puts "****** checking ROT *******"
puts [hex -mode e $s]
set a1 [rot -dir encrypt -key "U" $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [rot -dir decrypt -key "U" $a1]
puts "------ decode ------"
puts [hex -mode e $a2]
puts "$a2"
시저 암호의 이름으로 알려진 고전적인 암호화 알고리즘인 ROT의 커맨드는 rot로, 이것도 RC4와 마찬 가지로 암호화, 복호화별 구분, 키, 입력문자만 지정할 수 있습니다. 키는 1 문자로, 입력 문자열의 길이에는 제한이 없습니다.
암호화 기법과 미국의 정책
자신의 개인적인 자료가 마구 공개되어 남들에게 보여진다면 어떻겠습니까? 단순히 창피한 정도가 아니라 금전적으로 큰 영향을 주는 자료라면? 국가나 단체의 존립을 좌우할 수 있는 자료가 노출된다면? 예로부터 자신의 정보를 안전하게 저장하거나 전달하기 위해서 암호화 기법이 발달해 왔습니다. 과거의 단순한 암호화 기법들은 (지금도 사용되고 있지만) 현대의 기술로 대부분해독이 가능합니다. 아무리 복잡하다고 생각되는 방법도 기본적 암호화 기법으로 개발된 것이라면 많은 시간이 걸리지 않고도 해독이 됩니다. 현대의 암호화 기법은 수학적인 방법으로 개발되며 검증되고 있습니다. 주로 수학적으로 해를 얻기 힘든 정도에 보안성을 맡기는데, 전문 보안 알고리즘연구자가 아니라면 웬만큼 연구한 사람이 만들어 낸 알고리즘에도 허점이 보이기 마련입니다. 따라서 요즘의 모든 암호화 기법은 특허화되어 있고, 어떤 경우는 알고리즘의 공개를 꺼리기도 합니다. (알고리즘을 숨기는 것이 특히 보안에 도움이 되지는 않는 것으로 알려져 있습니다.) 점점 강력한 알고리즘이 개발되는 가운데 긴장하게 되는 것은 국가 첩보기관들입니다. 적성 단체나 국가가 해복할 수 없는 보안장치를 이용한다면 자신들에게 치명적이기 때문입니다. 이런 맥락에서 미국에서는 과거 보안 관련 상품(소프트웨어 포함)의 수출을 전면금지했었습니다. 이것으로 끝나지 않고 보안 장비를 만드는 데 사용되는 특수 칩을 미 정보국에서 쉽게 해독해 볼 수 있도록 만드는 법령을 통과시키려고 하기도 했습니다. 그러나 많은 반대 때문에 수포로 돌아가고 이후 PGP와 같은 공개 소프트웨어가 나오면서 미 정부를 긴장시키게 되었습니다. PGP는 만약 IDEA알고리즘이 허점이 없다면 매우 강력한 암호화 소프트웨어로써, 현재의 기술로는 수십수백억 년이 걸려야 암호를 풀어낼 수 있는 높은 보안성을 가진 소프트웨어입니다. 그러던 중 얼마 전 통상법을 고쳐서 40bit key를 이용하는 암호화 소프트웨어까지는 수출이 가능해졌습니다. 미국 내에서는 일정 수준 이상의 제품은 미 정부에서 비상시 풀어볼 수 있는 방식으로 제작하도록 되었습니다. 비록 정부가 직접 키를 가지고 있지는 않지만 필요시 어떤 정보라도 볼 수 있는 것이죠. 물론 많은 우려와 반대가 있었지만 새로운 법령들은 통과가 되었고 통상법도 역시 개정되었습니다. 그러나 얼마 전 일본에서 128bit 키를 이용할 수 있는 새로운 보안용 칩을 개발하여 생산에 들어가면서부터 또 다른 비판의 목소리가 일어났습니다. 또 “죽은 말 채찍질하기”가 아니냐는 것이죠. 즉 외부에서 자체적으로 보안성 높은 보안상품을 개발하는데, 통상법이 (미)국가 보안에 무슨 도움이 되겠냐는 것입니다. 보안 관련 산업의 개발은 매우 중요합니다. 단순히 어떤 상품을 만들어 수출해서 돈을 버느냐 마느냐가 아니라, 한 사회의 정보-보안 체계가 다른 외부의 기업-국가에게 장악될 수 있는 것입니다.