오래 기다리셨습니다!
날개 베타1 시동겁니다 부르릉~

운이 좋으신 분은 지금 접속하시면
오픈 전의 예고편 플래시(15초)를 보실 수 있을지도 모르겠군요 :)
날개 홈페이지
http://www.wingz.kr/
이번 버전에 새로 추가된 기능입니다
1. 메뉴 관리 기능이 추가되었습니다
: 최대한 직관적으로 만들기 위해 노력한 만큼, 써보시면 금방 이해하시리라 생각합니다.
관리자 모드에서 간단한 조작만으로도 2단 구조의 메뉴를 구성하실 수 있습니다.
2. 보안 로그인이 추가되었습니다
: 사용자의 비밀번호 보호를 위해 비밀번호 저장방식이 다소 변경되었습니다.
서버로 전송되는 값을 중간에 훔쳐보더라도 비밀번호를 쉽게 알아낼 수 없도록 하는 기능이 추가되었습니다.
기술 정보는 이 글의 마지막 부분에서 부연 설명하겠습니다.
3. 덧글 갯수 수집이 추가되었습니다
: 태터툴즈/티스토리, 이글루스, 다음 블로그, 네이버 블로그에 대해 덧글 갯수를 함께 수집하는 기능이
이번 버전에서 포함되었습니다. 다만 실험적인 기능으로, 약간의 속도 저하가 있을 수 있습니다.
4. 섬네일(미리보기 이미지) 기능이 추가되었습니다
: 본문 내에 그림파일이나 동영상UCC (다음TV팟, 엠앤캐스트, 태그스토리 등)가 포함된 경우 해당 미디어의 섬네일을 얻어 생성하고, 그렇지 않은 경우 해당 페이지의 스크린샷을 섬네일로 생성하여 미리보기 이미지를 출력할 수 있게 되었습니다
5. OPML 파일 지원이 추가되었습니다
: RSS 리더와 피드 목록을 교환할 수 있는 OPML 파일 형식의 입출력을 지원합니다
6. 태그 클라우드가 추가되었습니다
7. 태그 검색시 관련 검색어 및 이올린 관련글 기능이 추가되었습니다
: 이올린 관련글 역시 스킨 치환자로 제공되므로, 원하지 않으시면 제거하실 수 있습니다
8. RSS 출력 기능이 추가되었습니다
: 수집한 글 중 사용자가 재배포를 허락한 글을 RSS 피드로 재가공 할 수 있습니다
9. 통계 기능이 강화되었습니다
: 주간 방문자, 클릭률 등 추가 정보를 제공합니다
10. 새로운 형식의 스킨 2종이 추가되었습니다
: 게시판 형식의 wing_bbs 와 갤러리 형식의 wing_gallery 가 추가되었습니다.
기존 스킨 wing_basic 역시 베타1에 맞추어 변화가 있었습니다.
11. 새 글 표시 기능이 추가되었습니다
: 작성 시간을 기준으로 새 글 표시를 할 수 있습니다. 관리자 화면의 스킨설정 > 스킨 출력 설정에서 새 글의 기준 시간을 정할 수 있습니다 (예: 작성한지 한시간 이내 등)
이번 버전에서 변경된 내용입니다
1. 설치 스크립트를 개선했습니다.
- 이전 버전(알파)에서의 업그레이드 및 삭제 기능이 포함되었습니다. 웹브라우저에서 날개주소/setup/ 페이지에 들어가시면, 업그레이드 및 날개 삭제(Uninstall) 기능이 포함되어있습니다
- 최상위 경로에 설치할 경우 바른 경로를 찾지 못하는 문제가 수정되었습니다.
2. 일부 환경에서 로그인이 되지 않는 문제가 수정되었습니다
3. 피드 업데이트 루틴의 속도가 개선되었습니다
4. 가입시 피드를 함께 등록할 수 있도록 변경되었습니다
5. 자연스러운 인증 문장의 생성을 위한 종성 처리 구문이 포함되었습니다.
새로운 인증 문장 꾸러미가 추가되었습니다.
6. 일반 회원의 탈퇴 기능이 추가되었습니다. (mypage)
7. 모든 관리자를 제거할 수 있던 문제가 수정되었습니다
8. 일부 환경에서 한글에 역슬래시가 붙어 나오던 문제를 수정했습니다
9. 태그 필터가 강화되었습니다
- 특정 태그만을 허용하는 것 외에도, 특정 태그를 거부하는 기능이 추가되었습니다
10. 인증 기능 사용시 글 목록, 피드 목록이 정상적으로 출력되지 않는 문제가 수정되었습니다
보너스!

Special Thanks
항상 응원해주시는 TNC의 여러분, 특히 이번 기능추가에 많은 도움을 주신 한영님, 재용님, 윤호님. 보안 로그인 구현으로 고민하고 있을 때 결정적인 힌트와 조언을 아낌없이 주신 최호진님, 날개 사이트 코딩과 CSS 관련 많이 도움주신 나니님, 테스트를 도와주신 루이체님, 날개 이벤트를 위해 고생해주신 파이님과 체스터님 및 조시란이 그리고 날개 언제 나오냐고 압박주시던 모든 분들 감사합니다! (혹시라도 이름이 빠진게 있다면 그건 단지 제 기억력이 붕어라서 그런 겁니다;; 기껏 도와줬더니 땡스도 없다고 분노하진 마셔요 ; ㅅ;)
보안 로그인 관련...
보안 로그인 관련 기술 정보
여기서 말하는 보안 로그인은, 데이터의 전송 차원에서의 이야기입니다. 키로거나 스파이웨어를 이용해 별도로 빼내는 것을 차단한다는 뜻은 아닙니다. 일반적으로 사용되는 SSL 전송의 경우, 패킷 스니핑 등을 통해 네트워크 상에 전송되는 데이터를 가로채서 보더라도 암호화 되어 있기 때문에 상당히 안전하게 보호가 되지만 웹호스팅을 주로 써야 하는 보통의 사용자들에게 이 방법은 무리가 많습니다. 때문에 네이버 등에서는 자바스크립트를 이용하여 RSA와 같은 공개키 암호화 방식을 이용해 전송함으로서 사용자가 입력한 비밀번호가 아예 네트워크상에 흐르지 않도록 하는 방법을 사용합니다.
날개에서도 이러한 방법을 응용하여, HMAC-MD5 에 바탕을 둔 암호화 전송을 로그인 부분에 한해 부분적으로 우선 적용하였습니다. 먼저 접속자의 IP를 비롯해 몇 가지 인수를 바탕으로 랜덤한 비밀키가 생성되고, 이로부터 공개키를 만들어냅니다. 클라이언트에서는 자바스크립트를 이용해 공개키와, 사용자가 입력한 로그인 정보를 조합하여 암호화 한 뒤 서버에 전송하고, 서버는 수신한 데이터를 서버에 존재하는 비밀키 및 사용자 정보등을 조합, 대조하여 로그인을 처리하게 됩니다. 이 과정에서 키 값은 항상 랜덤하므로 POST 를 통해 서버에 전달되는 값을 가로채더라도 매번 다른 값이 전송되기 때문에 원래의 비밀번호를 유추하는 것이 이론상으로 완벽하게 불가능 한 것은 아니지만 매우 어려우며 (Sniffing 방지), 키가 바뀌는 동시에 해당 키에 대한 인증 정보는 결코 클라이언트에 드러나지 않으므로 같은 값을 전송하더라도 인증을 통과할 수 없습니다 (replay attack 방어).
더불어, 사용자 정보를 등록하는 과정에서 각 사용자가 입력한 비밀번호 역시 아이디를 키로 하는 HMAC-MD5 방식에 의해 암호화 되어 저장되므로, 비밀번호가 같은 사용자더라도 실제 저장되는 값은 다르게 됩니다. 따라서 외부의 공격을 방어할 뿐만 아니라, 내부 관리자 역시 사용자의 비밀번호를 알아낼 수 없도록 설계되어 있습니다. 물론, 악의적으로 이러한 암호화 루틴을 걷어내는 행동까지는 차단할 방법이 없지만요.
사용자 정보 암호화 저장 관련
위에서 잠시 설명했습니다만, 날개 베타1 에서는 사용자의 비밀번호를 저장할 때 조금 다른 방식을 씁니다.
이해를 돕기 위해 한가지 예를 들어 설명하도록 하겠습니다..
비밀번호가 1111 이라고 할 경우, 여기에 대해 MD5 해시를 얻으면 'b59c67bf196a4758191e42f76670ceba' 라는 문자열이 됩니다. 이 값을 저장했던 것이 알파2 까지의 방식이고, 현재 일반적으로 많이 쓰이고 있는 방식입니다. 그러나 여기에 한가지 문제점이 있는데 'b59c67bf196a4758191e42f76670ceba' 라는 값은 언제나 '1111' 을 뜻하므로, 기계적인 방법의 조합에 의해 대조할 수 있게 됩니다. 물론 이 데이터는 일반적으로는 외부에 드러나지 않으므로 치명적인 문제라고 하기는 좀 뭐하지만요.
그래서, 여기서 얻어진 'b59c67bf196a4758191e42f76670ceba' 자체를 한번 더 MD5 로 돌리는겁니다. 문자의 길이가 길어지고 구성이 복잡해지면서 단순 대조를 통한 비교는 조금 더 어려워집니다. 하지만 이 방법 역시, 첫번째 방법에서 사용된 대조표가 있다면 여전히 어렵지 않게 2차 대조표를 구성해 낼 수 있습니다. 그래서 사용하는 방법이, 여기에 적당한 키를 포함시켜 다시 한번 암호화 하는 것입니다. 이것이 HMAC-MD5 라는 방법입니다. 아이디가 test 라고 할 경우, 이것을 키로 해서 한번 더 암호화 하게 되면 '804eb062af0924bb3ca7ce8fbfc37825' 라는 문자열을 얻게 됩니다. 아이디가 hello 라면, 똑같이 비밀번호가 1111 이더라도 얻어지는 문자열은 'e07354e29a8d72d7c4d892a77926d130'가 되지요. 완벽하다고는 할 수 없으나, 일반적으로 상정할 수 있는 문자열 대조, 무차별 대입에 의한 비밀번호 깨기 공격을 상당히 늦출 수 있습니다. 보통 4~5자 정도의 비밀번호의 경우 무차별 대조를 통해 시도하면 최대 30분 이내에 확인할 수 있지만, 길이가 길어지면 필요한 시간은 확연히 늘어나게 됩니다.
알파벳 소문자 26개와 숫자 0~9까지 10개, 총 36개의 문자를 사용하여 구성된 32자 문자열의 종류는 36의 32승가지... 도저히 계산이 안되네요. 참고로 36의 8승이 2,821,109,907,456입니다. 2조 8천억...을 훨씬 넘기는 경우의 수가 나오죠. 게다가 키가 추가되어 길이 자체가 32자를 넘게 되니, 단순 연산과 추산에 의한 공격으로는 결코 쉽지 않을 뿐더러, 무슨 금융 시스템도 아니고 그 정도의 노력과 공을 들여서 침투하고 싶은 마음을 가지는 사람도 거의 없겠죠.
이야기가 길어졌습니다만, 요약하면 이렇습니다.
나름대로 비밀번호 보호와 보안을 위해 많이 공을 들였고 신경을 썼으니 한층 안심하셔도 좋지만, 다만 이것이 완벽하거나 절대적인 방법은 결코 아니며 뚫릴 수 있는 여지가 있는 만큼 최선의 방법은 지나치게 간단한 비밀번호를 사용하시는 것을 피하고 (되도록 8자 이상, 두 글자 이상의 기호를 포함하시면 효과 만점), 비밀번호 관리에 신경을 쓰시는 것이 좋습니다.
너무 오버하는거 아니냐고 생각하실 분들도 계시겠지만, 보통 사람들이 하나의 아이디와 비밀번호로 대부분의 사이트를 동일하게 가입해서 사용하는 경우가 많은 것을 생각하면, 부족하나마 최대한 데이터를 안전하게 보호할 수 있는 방법을 고민하는 것 역시 프로그램을 개발하고 배포하려 한다면 꼭 필요하다고 생각하기 때문이라고 이해해주시면 좋겠습니다.