HTTP & HTTPS HTTP(HyperText Transfer Protocol) 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다. 이런 보안 문제를 해결해주는 프로토콜이 'HTTPS' HTTPS(HyperText Transfer Protocol Secure) 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTPS는 텍스트를 암호화한다. (공개키 암호화 방식으로!) HTTPS의 암호화 원리를 간단히 알아보면 핵심은 공개키 암호화 방식이다. (*참조) 공개키 알고리즘 간단한 정리 암호화, 복호화시킬 수 있는 서..
대칭키 & 공개키 대칭키(Symmetric Key) 암호화와 복호화에 같은 암호키(대칭키)를 사용하는 알고리즘 동일한 키를 주고받기 때문에, 매우 빠르다는 장점이 있음 but, 대칭키 전달과정에서 해킹 위험에 노출 공개키(Public Key) 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘 자신이 가지고 있는 고유한 암호키(비밀키)로만 복호화할 수 있는 암호키(공개키)를 대중에 공개함 공개키 암호화 방식 진행 과정 A가 웹 상에 공개된 'B의 공개키'를 이용해 평문을 암호화하여 B에게 보냄 B는 자신의 비밀키로 복호화한 평문을 확인, A의 공개키로 응답을 암호화하여 A에개 보냄 A는 자신의 비밀키로 암호화된 응답문을 복호화함 대칭키의 단점을 완벽하게 해결했지만, 암호화 복호화가 매우 복잡함 (암호화하..
JWT : jsonwebtoken 토큰 인증 웹 서비스를 만들때에 기본적으로 구현해야 하는 것중 하나가 인증이 아닐까 싶다. 처음에 웹 개발이라는걸 접했을때에는 서버에 저장하는 세션 방식으로 인증을 구현했다. 그런데 웹이 아닌 모바일과 같은 클라이언트들이 많이 생겨나면서 이러한 기존의 세션/쿠키 방식에 한계가 생겨났다. 그래서 요즘에는 세션/쿠키 방식이 아닌 토큰을 이용한 인증 방식을 많이 사용한다. 그 중에서도 오늘은 최근 많이 사용하고 있는 JWT 에 대한 이야기이다. JWT 는 JSON Web Token 의 약자이다. 이름에서 알 수 있듯이 JSON 형태로 되어있는 토큰이다. 이 토큰 인증 방식의 특징은 서버에 토큰 정보를 저장할 필요가 없다는 것이다. 서버는 해당 토큰이 유효한 지만 체크하면 되는..
JWT 토큰은 어디에 저장하는게 좋을까?이전에 JWT 토큰에 대한 글을 쓴 적이 있는데 그것의 연장선 상에 있는 이야기이다. JWT 를 구현하는데에 있어서 토큰을 어디에 저장해야 하는가는 한번 생각해 볼만한 문제이다. 토큰 인증이란 결국 사용자가 인증받은 토큰을 들고 다니면서 서버에 자원을 요청시에 함께 전달해야 하는 것인데 그러기 위해서는 어딘가에는 토큰을 클라이언트가 저장을 해야 하는 것이다. 웹 어플리케이션을 제작중이라면 생각해볼 수 있는 2가지 방법이 있다. HTML5 web storage (Local Storage, Session Storage)Cookies그럼 이 두 가지를 하나씩 살펴 보면서 비교해보자. 1. HTML5 web storage web storage 는 HTML5 부터 지원되는 ..
앞서 md5, sha256을 이용한 비밀번호 보안 실습에 이어서 pbkdf2-password 모듈을 이용한 실습을 진행하겠습니다. * PBKDF2란 무엇인가? PBKDF2(Password-Based Key Derivation Function2) 암호 반복횟수, 암호기반 키 유도함수2.. 암호화 된 키의 무차별 대입 공격에 대한 취약성을 줄이기 위해 계산 비용이 많이 소요되는 주요 파생 함수이다. md5, sha256에 이어서 더욱 복잡하게 암호화 할 수 있는 기능을 가지고 있는 해시 함수라고 보시면 될 것 같습니다. 모듈 설치 모듈 테스트를 위한 node 실행 암호화된 해시 값 확인 function(err, pass, salt, hash)함수의 순서대로 해당 값 확인ex) null '111111' 'sa..
)nodejs의 모듈을 사용하여 비밀번호를 보안하는 방법에 대해서 알아보겠습니다. npm의 md5 모듈을 설치합니다. var md5 = require('md5'); 모듈을 다음과 같이 불러옵니다. app.post('/auth/login', function(req, res){ var uname = req.body.username; var pwd = req.body.password; for(var i=0; i md5('111'); password에 암호화 된 코드를 선언합니다. 각각의 다른 salt로 인하여 외부에서는 다르지만 내부적으로는 같은 비밀번호를 갖게 됩니다. 로그인과 로그아웃이 잘 이루어진 것을 확인할 수 있었습니다. 하지만 md5는 해커들에 의해서 취약점이 쉽게 노출될 수 있는 모듈입니다. ht..
- Total
- Today
- Yesterday