yoursecrets.xyz 암호화 사이트를 제작했습니다! 코드는 깃허브에 업로드 되었으니 확인 부탁드립니다.
1. 사이트 소개
2. 웹사이트 제작 방식
3. 암호화 종류 소개
4. 사이트 암복호화 방식
5. 한계점
암호화 복호화 사이트입니다. 메인화면에서 “Upload”버튼을 누르면 패스워드와 업로드할 텍스트를 입력할 수 있는 업로드 페이지로 넘어갑니다. 패스워드와 텍스트를 입력한 후 업로드 버튼을 누르면 다음과 같은 ID값을 부여받게 됩니다 :
ID 값을 부여받았다면 메인 페이지에서 패스워드와 부여받은 ID값을 입력합니다.
“Decrypt” 버튼을 누르면 다음과 같이 해독이 됩니다 :
“Delete”버튼을 누르고 패스워드와 ID값을 다시 한번 입력하면 글을 지울 수 있습니다.
사이트 접속하셔서 메인화면의 “Notice!”, “Tips”, “Encryptions” 버튼도 클릭해보세요 ~ : yoursecrets.xyz
APM기반의 웹호스팅 서비스를 받아 제작했습니다. 도메인은 GoDaddy.com에서 구입했습니다.
도메인을 구입한 후, 카페24와 고대디의 네임서버를 연결해서 사용했습니다.
웹사이트는 반응형으로 제작하여 웹페이지가 보여지는 환경에 맞출 수 있도록 했습니다. 반응형 CSS코드의 예시는 다음과 같습니다 :
헤더의 폰트사이즈를 5vw로 설정하여 브라우저의 크기에 따라 사이즈가 변하도록 했습니다.
브라우저 크기에 따라 div의 크기가 달라지고, 해당 div안에 있는 textarea의 크기 역시 div의 90%의 길이로 달라집니다.
모바일 환경의 경우에는 textarea의 크기를 90%가 아니라 100%의 비율로 달라지게 설정할 수 있습니다.
해싱은 평문을 암호화하는 것은 가능하지만, 암호문을 평문으로 복호화하는 것은 불가능한 단방향 암호화 알고리즘 입니다.
MD4, MD5, SHA0, SHA1, SHA2(SHA-256, SHA-512) 등의 알고리즘이 있습니다.
해싱은 주로 비밀번호 암호화할 때 쓰입니다. 해싱을 할 때에는 별도의 키가 필요하지 않기 때문입니다. 그래서 해싱된 비밀번호를 데이터베이스에 저장하고, 입력 값으로 들어온 평문 비밀번호를 해싱해 이 두개의 암호화된 값을 비교하는 방식으로 이용됩니다. 제 사이트에서는 SHA-512알고리즘이 쓰였습니다.
비밀번호 암호화 말고도 블록체인에서도 해싱이 쓰입니다. 주로 블록이 하나 올라갈 때 그 블록에 서명하는 용도로 쓰입니다.
암호화와 복호화할 때 같은 키가 이용되는 방식입니다.
DES, 3DES, AES 등의 알고리즘이 있습니다.
가장 직관적으로 이해할 수 있는 방식입니다.
암호화할 때의 키와 복호화할 때의 키가 서로 다른 방식입니다.
RSA 알고리즘이 가장 유명합니다.
각자 개개인은 비밀로 간직하고 있는 개인키를 갖고 있고, 남들도 볼 수 있는 공개키도 갖고 있습니다. 그리고 메시지는 개인키와 공개키 한쌍으로 암복호화를 할 수 있습니다. 즉, 개인키로 암호화된 암호문을 공개키로 복호화할 수 있고, 역으로 공개키로 암호화된 암호문은 개인키로 복호화할 수 있다는 것 입니다.
아래의 왼쪽 도식부터 설명해보자면, 밥이란 사람이 앨리스에게 메시지를 전달하려고 하는 상황을 가정해 봅시다. 암복호화를 하려면 개인키와 공개키 한 쌍을 이용해야하므로, 밥은 앨리스의 공개키를 이용해 메시지를 암호화하고 앨리스는 밥에게서 받은 메시지를 자신의 개인키를 이용해 해독하게되는 방식입니다.
오른쪽 도식의 경우에는, 앨리스가 밥에게 메시지를 보내는데 앨리스 본인이 보냈다는 것을 인증하는 것이 중요한 경우 입니다. 앨리스가 자신의 개인키로 암호화한 암호문을 밥에게 보내면 밥이 앨리스의 공개키로 해독하는 원리입니다. 누구나 볼 수 있는 공개키로 암호문을 해독할 수 있으므로, 암호화하는데 자체에 목적이 있기보다 누가 보냈는지 확인할 목적으로 사용되는 방식이라고 할 수 있습니다.
사진 출처 : 위키피디아
your secrets 웹사이트에서 사용되는 mysql의 데이터베이스는 ‘Encs’라는 테이블을 가지고 있고 해당 테이블에는 ‘id’, ‘ti’, ‘k’, ‘essay’라는 애트리뷰트가 있습니다.
‘id’는 글번호이고 기본키이며 랜덤으로 생성됩니다.
‘ti’는 글쓴시각의 시간정보를 저장합니다.
‘k’는 사용자가 입력한 패스워드에 시간정보를 더한 값의 해시값입니다.
‘essay’는 사용자가 입력한 글의 암호문 입니다.
글이 암호화되고 복호화되는 메커니즘을 도식화하면 다음과 같습니다 :
글이 암호화 되는 과정 입니다:
복호화 되는 과정 입니다:
삭제 과정입니다:
아무리 현재 뚫리지 않은 SHA512와 AES알고리즘을 사용해 암호화했다 하더라도, 네트워크 단에서 평문전송을 한다면 공격자는 사용자가 입력한 값을 훔쳐봄으로써 해킹을 할 수 있습니다.
위의 패킷들은 제가 메인 페이지에서 id와 password를 입력하고 Decrypt버튼을 눌렀을 때 잡은 것 입니다.
다음에 개발할 때는 네트워크를 통해 전달되는 정보 자체를 암호화하는 방법을 알아보고 개발해야겠습니다.
글을 확인하기 위해선 비밀번호와 5자리의 숫자를 쓸 수 있는데, 인증 확인 갯수에 대한 제한이 없어 자동화공격으로 뚫릴 수 있습니다.