포럼

- 개요 -

SSL을 대신하여 간단한 아이디어를 제시해 봅니다.)


Javascript (jQuery) + AES + RSA 를 이용한 클라이언트→서버로의 단방향 form 암호화 입니다.

Hybrid 암호화(RSA + AES) 를 이용하여 단순 RSA만을 사용하는것보다 속도가 빠릅니다.


RSA : 1024bit

AES : 128bit CBC mode 를 이용하였으며, 중소규모 사이트의 보안 향상을 위하여 고안하였습니다.

보안 강도 : 저 RSA+AES 중 하나를 1년내에 어떻게 든 깨시면 제가 커피사드립니다.^^



- 원리 및 과정 -

1. 서버쪽에서 Javascript 변수로 RSA public key를 쏴줍니다.

(RSA key는 성능을 위하여 웹사이트 전체에 걸쳐서 addon 설치시 개발자가 딱 한번 만들어 두고 동일한 key를 계속 사용합니다. 혹은 1일,1주일 등의 단위로 자동으로 적절히 바꾸는 방법이 있겠지요.)


2. 클라이언트에서 폼을 submit 할때 자바스크립트(j Query)로 해당폼을 가로챕니다.


2-1) 30글자의 랜덤한 TEXT를 만들고(이하 AES_KEY라고 합니다.) 그 AES_KEY를 javascript로 

RSA Public_key로 암호화 합니다.(일단은 30글자, 나중에는 100글자를 사용하면 좋을것 같습니다.)

2-2) form에다 dynamic 하게 hidden input을 생성하고 해당칸에 RSA로 암호화한 AES_KEY를 넣습니다.

2-3) 모든 input 내용을 AES로 암호화 힌 후 내용을 대체합니다.

2-4) 이제 클라이언트에서 전송합니다.


3. 서버에서 받은후 해독합니다.(addon)

3-1) 서버에서 RSA로 암호화된 AES_KEY를 받은뒤에 서버에 저장된 RSA Private_key로 풀어줍니다.

3-2) 해독한 AES_KEY로 나머지 폼들($_POST, $_GET)들을 전부다 풀어줍니다.


- 장점 및 단점 -

이 방법의 단점 으로는

- Javascript 미지원 브라우저에서는 평문으로 전송된다는 것.

- form이 아닌 정보는 모두 plain text로 날라간다는것

- 클라이언트→서버 단방향 암호화 라는 것

- 그리고 세션쿠기가 그대로 날라간다는 취약점이 있다는 것이지요(이거는 SSL 밖에 답이 없을것 같네요.)


그러나 복잡한 SSL을 addon 하나로 매우 간단하게 끝내주기에, 수많은 사이트를 관리/개발 분들에게 편리하겠지요.


일단 관리면에서 1년에 3천원 짜리 호스팅에 도메인도 수시로 바꾸는 환경이라면 SSL을 설치하기가 매우 귀찮지요. 거기에 SSL은 1년마다 도메인별로 비용도 들고, 설치도 조금 난이도가 있고, 갱신도 지속적으로 해야 하기요. 그러나 이 방법은 한번 설치하면 OK이고 addon 설치 한번으로추가비용 없이 경제성 대비 뛰어난 보안을 유지 할 수 있겠지요.

또한 많은 sub domain을 이용하여 웹사이트를 운영하신다면 SSL 설치비용을 절대로 무시하지 못하지요.

또한  로그인, 회원가입시 모든 폼을 자동으로 암호화 해 주니 로그인/회원가입시만 SSL을 사용한다면 SSL대비 보안 강도는 큰 차이가 없을것 같네요.


암튼 1줄요약하면, 보안성 대비 매우 경제적이다 정도가 될것 같습니다.



- 구현 및 데모, 실패 -
아무튼 그리고 이것을 직접 구현해 보았습니다.
그러나 간단하게 구현한 demo site는 정상적으로 작동하나, XE용 애드온에서 jquery로 폼을 가로채는게 작동하지 않네요.
분명 같은 코드인데 XE에서 동작하지 않으니 정말 잘 모르겠습니다. 여기서 막히니, 그 이후 부분은 테스트를 하고자 해도 해 보지 못했습니다. 2일정도 생각해 보았는데, 아무리 생각해도 풀리지 않네요. 도와주시면 정말 감사하겠습니다.


정상적으로 작동하는 demo stie (소스보기를 클릭하시면 RSA_n RSA_e로 구성된 RSA public key를 보실 수 있습니다.)

(개발자의 편의를 위해 hidden input을 사용하지 않았습니다.)

http://first.wifi.olieh.com/demo/client.php


출력결과는

0. RSA로 decrypt한 AES_key


1. AES 암호화된 ID

2. AES 암호화된 PW

3. 제출버튼 (input type이 submt image file은 암호화X)

4. RSA로 암호화된 AES_key


5. 암호풀린 ID

6. 암호풀린 PW


//RSAkey 생성기 입니다. 애드온 설치시 관리자가 직접 실행하고, 삭제하면 되나, demo를 위해 열어두었습니다.

http://first.wifi.olieh.com/demo/RSA.key.generator.php 


사용한 library는

movable type aes.php aes.js

http://www.movable-type.co.uk/scripts/aes.html

http://www.movable-type.co.uk/scripts/aes-php.html

License : CCL 3.0 BY


phpseclib : RSA 서버단에서 key생성 및 decrypt

http://phpseclib.sourceforge.net/

License : MIT


php reCaptcha

https://developers.google.com/recaptcha/docs/php

License : 자체라이센스(MIT + 반드시 라이센스 첨부 필수)


RSA and ECC in JavaScript

http://www-cs-students.stanford.edu/~tjw/jsbn/

License : BSD



차후 개선 여지는

1. php AES library를 조금 더 빠른것을 사용하는 방법이 있을것 같습니다. 다만 php 와 aes에서 둘다 호환이 가능해야 할것 같습니다. crypto.js 와 phpseclib의 AES를 사용하는것을 시도했는데 잘 하지 못했습니다. 그런데 이렇게 속도문제로 개선해야 할정도의 사이트이면 SSL을 사용하는것이 답이라고 생각합니다.

(phpseclib의 AES는 openssl과 연계되어 현재 적용된 AES lib보다 20배 정도 빠르다고 합니다. 다만 이거에 맞는 js lib를 찾지 못하였습니다.)


2. 클라이언트 상의 jquery에서 현재는 현재 입력한 input form을 지우고 암호화 시킨 문자열을 그냥 넣어버려서 end user가 암호화된문자열은 그냥 보게되지만, 차후에는 input text form의 갯수만큼, hidden form을 dynamic 하게 만들고 추가한 hidden form에 암호화 된 문자열을 집어넣은뒤에, 일반 text form의 내용은 지워서 일반 사용자(비개발자)가 깔끔하게 볼 수 있으면 좋을듯 합니다.


3. asymetric 암호화의 경우 RSA가 아닌 ECC암호화가 더 빠르다고 하는데, 쓸만한 library를 찾아 보지 못했습니다. 영문위키상으로는 RSA 3072bit = ECC 384bit 정도의 강도 라고 하네요.

내용추가 : ECC는 특허가 걸려서 힘들것 같네요.ㅠㅠ 그래서 lib도 없는것 같아요.



미완성된 addon (이름: SSLPLS) 및 정상적인 demo는 LGPLv2 로 배포합니다.

SSLPLS는 SSL Please의 약자이며 가능하면 SSL을 적용해주세요. 라는 뜻입니다.

글쓴이 제목 최종 글
2donggalbi Windows XP 지원 종료에 따른 IE8 지원여부 [16] 2014.04.13 by 2donggalbi
곰탕lol왕자 모바일 레이아웃 고르기가 참 힘드네요 [10] 2014.04.13 by 곰탕lol왕자
xe매니아 디도스는 막을 방법이 없나요? [9] 2020.03.14 by 도라미
zombiman 막강한 자료들이 줄줄이 배포 되고 있네요. [2] 2014.04.13 by teguh100
우리아기 XE 설치 할때 DB 선택 뭐로 하시나요? [9] 2014.04.13 by LI-NA
고구마군 Open SSL 취약점 발건... 방어 [6] 2014.04.12 by 고구마군
이동화309 xe에 대한 불만.. [14] 2014.04.12 by KrteamENT
마이웹 XE git에 소스 edit기능을 클릭하니 소스 수정을 하는 화면이 나오던데요. [4] 2014.04.12 by 마이웹
RedLan EZMember Pre Release 배포 ... [3] 2014.04.11 by 숭숭군
KrteamENT XDT가 닫혔네요..ㄷㄷ [19] 2014.04.11 by 2donggalbi
SOFTA 파워묵업 Power MockUP good story board! [광고가 아닙니다 ㅠ.ㅠ] [1] 2014.04.11 by 이니셔티브
최윤한 속도관련해서 조언좀 구합니다. [14] 2014.04.11 by 최윤한
김 기 상 조언부탁드려요. [2] 2014.04.11 by Double'U'
W.O 정말 만족스러운 CMS, XE [1] 2014.04.10 by 키스투엑스이
YJSoft Xzet 1.4.5.23-alpha4(XE 1.4.x 보안패치) 를 공개합니다. [2] 2014.04.10 by natura
StyleRoot 통합검색 확장모듈 자소 분해 + 검색어 하이라이트 구현 완료 [7] file 2014.04.10 by 루팡쿠팡
착한악마 와~~킴스큐....보니... [26] 2014.04.10 by 착한악마
AJKJ SSL을 대신할 Javascript/RSA/AES 아이디어 + 데모 + 미완성Addon [19] file 2014.04.10 by AJKJ
prologos DB를 mssql 사용시 한글 문제 [3] 2014.04.10 by prologos
YJSoft Github HowTo - 3. 웹 상에서 Pull Request [3] file 2014.05.05 by 키스투엑스이