포럼
비번 암호화 방법 개선에 대해 이슈를 등록했습니다.
2014.08.08 14:24
여기서는 주로 눈팅만 하는 프로그래머입니다.
다른 알고리듬 사용이 가능한 버전의 서버에서도 XE는 항상 솔트 없는 md5, sha1만을 사용하도록 되어 있어서 개인정보보호법 권고에 맞지 않는다는 등, 전에도 여러 가지 이야기가 있었던 것으로 기억합니다.
아무래도 고쳐질 기미가 보이지 않아서 제가 직접 수정을 해보기로 했습니다. 강력한 알고리듬이 지원되는 서버에서는 bcrypt나 PBKDF2를 사용하고, 그렇지 않은 서버에서도 최소한 솔트는 사용하자는 취지입니다. 그런데 혼자 고쳐서 쓰기만 하면 치사하잖아요? 그래서 XE Core를 fork해서 정식으로 pull request를 넣으려고 합니다.
※ 비번 암호화에 대한 자세한 내용은 아래 링크의 글과 댓글들을 읽어보시기 바랍니다.
http://www.phpschool.com/link/tipntech/78316
http://helloworld.naver.com/helloworld/318732
※ 일단 다른 개발자분들의 의견을 묻기 위해 이슈부터 등록했습니다. 근데 주말이라 너무 조용하네요.
https://github.com/xpressengine/xe-core/issues/889
https://github.com/xpressengine/xe-core/pull/894
댓글 20
-
Paul
2014.08.08 14:49
-
Lansi
2014.08.08 15:56
몇번이나 비슷한 이슈가 올라갔지만 모두 다 거절당했죠...
-
기진곰
2014.08.08 16:17
간단한 작업이 아닌데다 호환성 문제도 걸려있으니, 그냥 만들어 달라고 조르기만 해서는 곤란하겠죠. XE 개발자분들이 시간이 팍팍 남아도는 것도 아니잖아요. 그러나 실제 작동하는 코드를 만들어 pull request를 한다면 좀더 쉽게 논의할 수 있지 않을까 합니다.
-
socialskyo
2014.08.08 16:20
그런데 혼자 고쳐서 쓰기만 하면 치사하잖아요? 그래서 XE Core를 fork해서 정식으로 pull request를 넣으려고 합니다.
=> 오픈소스의 힘인가요!! 기진곤님 멋지시네요!
-
DoS™
2014.08.08 18:25
멋진일 하시네요..
정말 감사합니다.
-
ms.kim
2014.08.10 17:09
반영되길 기원합니다 -
도라미
2014.08.10 18:05
큐브리드, MSSQL에서도 칼럼길이가 정상적으로 수정되나요? MSSQL은 모르겠지만 큐브리즈는 칼럼길이를 자동으로 변경할 수 없습니다. -
기진곰
2014.08.10 19:24
MSSQL은 컬럼길이 변경이 가능합니다. MySQL도 당연히 되고요.
큐브리드도 8.4인가 9.0인가부터는 ALTER TABLE ... MODIFY 구문을 사용해서 컬럼 종류 및 길이를 변경할 수 있는 것으로 알고 있습니다.
그 전의 버전이라면 임시 컬럼을 추가하고, 원래 컬럼의 값을 임시 컬럼으로 복사한 후, 원래 컬럼을 지우고, 길이를 바꿔서 다시 생성한 후, 복사해 둔 값을 원래대로 복원하고, 마지막으로 임시 컬럼을 삭제하는 캐삽질이 필요합니다 ㅡ.ㅡ;;
-
도라미
2014.08.10 19:27
문제는 큐브리드에 대한 버전 호환성을 XE에서 권고하지 않았습니다. 구버전을 사용하는 사람이 패치를 적용하고 오류가 발생할 수 있습니다. 이에 대한 대안은 있나요?
-
BJ람보
2014.08.10 19:31
pull리퀘스트 보내신거 보니깐, 기존에 사용한 사람이 업글 당시에는 기존 옵션을 따라가도록 했습니다.
기존 설정한 사람은 MD5방식으로 계속 이어지는것 같습니다.
-는 약주해서 재대로 모르겟찌만 아마도 그렇습니다..
-
기진곰
2014.08.10 19:32
안그래도 대안을 궁리하는 중입니다. 일단, BJ람보님 말씀처럼 기본값이 md5 그대로 유지되기 때문에 당장 문제가 생기지는 않습니다. 기본값을 다른 알고리듬으로 바꾸면 그 때부터가 문제인데요...
알고리듬을 선택하는 화면에서 현재 xe_member 테이블의 password 컬럼 길이를 파악해서 길이가 넘치는 알고리듬은 아예 선택하지 못하도록 하는 방법이 가장 안전하겠고요...
60자에서 잘라버려도 봐준다는 점을 이용해서 컬럼 길이가 충분하지 않은 경우 해시값을 60자에서 잘라 저장하는 방법도 있겠고요. (MySQL과 큐브리드는 자동으로 잘려서 저장됩니다. MS SQL은 길이가 넘치면 에러가 납니다.)
길이가 넘치는 알고리듬을 선택할 경우 DB 스키마를 자동으로 업데이트해 주는 방법도 있겠지만, 말씀드린 것처럼 큐브리드 8.3 이하 버전에서는 쿼리가 복잡해지기 때문에 데이터 유실의 위험이 있어 별로 내키지는 않습니다.
-
도라미
2014.08.10 23:20
이런저런 복잡한 사연? 때문에 XE개발팀이 암호화 방식을 바꾸는게 어려운게 아닌가 생각합니다. 드루팔을 예로 들면, 소숫점 자리 업데이트가 아닌 정수 자리 업데이트에 하위 호환을 포기하면서 암호화 방식을 바꾼것처럼, XE 2.0 버전에는 암호화 방식을 바꿀 수 있지않을까 생각합니다.
-
기진곰
2014.08.11 07:34
암호화 방식 하나 바꾸는데 하위 호환까지 포기할 필요는 없다고 봅니다. 하위 버전 사용자들을 배려하려면 좀더 노력이 필요할 뿐이죠. password 필드 길이가 60자로 되어 있는 경우를 자동으로 인식하는 기능을 별도의 브랜치에서 개발하고 있습니다. 1.8까지는 봐드리겠지만, 그 이상 뒤로 미룰 핑계는 드리지 않을 생각입니다 ^^;
-
기진곰
2014.08.11 11:06
큐브리드 컬럼길이 문제에 대한 업데이트입니다.
DBCubrid.class.php 소스를 보시면 496줄에서 모든 varchar 컬럼의 길이를 실제 설정값의 3배로 생성하고 있음을 알 수 있습니다. 예전에 큐브리드에서 UTF-8을 공식 지원하지 않았기 때문에, 한글을 저장할 경우에 대비하여 일부러 컬럼 크기를 넉넉하게 해두는 것으로 보입니다.
그래서 큐브리드 사용시 password 컬럼의 길이는 60바이트가 아닌 180바이트입니다. 이번에 추가한 알고리듬 중 해시 길이가 가장 긴 것은 sha512+salt인데, 이건 170바이트입니다. 따라서 큐브리드에서는 컬럼 길이를 늘려줄 필요가 아예 없습니다 ^^
-
이즈야
2014.08.11 14:50
해시를 잘라서 저장하는 건 좀 반대입니다. 가능하면 컬럼 길이를 늘리는 걸 목표로 해주셨으면 합니다 :) -
기진곰
2014.08.11 15:20
잘라서 저장하는건 어디까지나 최후방편이죠. (그래도 뒤에 몇 글자 잘린 sha256이 그냥 md5보다 백배 낫습니다.)
이런 경우뿐 아니라 나중에 언제라도 필요할 때 컬럼 길이를 쉽게 늘릴 수 있도록, DB 클래스 자체에 컬럼속성변경 메소드를 추가하는 쪽으로 풀리퀘 하나 더 넣었습니다. 그런데 이것도 변경폭이 크다 보니 과연 받아주실지 모르겠네요.
-
Garon
2014.08.12 01:03
제가 요즈음, 예전에 저장된 비번들과의 충돌이라는 이슈가 생각나서 생각한건데...기존 암호화를 사용한 USER 1 이 있으면1. USER1 로그인2. 비번 변경 페이지로 이동(강제)3. 비번 변경 페이지에서 비번 변경4. 비번 변경한 것을 USER1 의 비번으로 대치.시키면, 이전에 사용하던 유저들의 비번도 싹 바꿀수 있지 않을까요?뭐... DB관련해서는 깜깜이라... 책좀 들여다 보고, 다시 의견 남길께요.
(감사합니다) -
DoS™
2014.08.12 08:52
좋은 방법인거 같네요
-
기진곰
2014.08.12 09:15
2~3번 단계는 건너뛰어도 됩니다. 로그인 즉시 새로운 해시 알고리듬을 적용하여 다시 저장됩니다. (기존에 $usaSha1 설정을 사용하는 경우에도 이런 방식을 사용했습니다. 이 점에 있어서는 바뀐 것이 없습니다.)
물론 로그인 상태가 기억되어 있는 사용자라면 일단 로그아웃했다가 다시 로그인하거나, 비번을 변경하기 전에는 새로운 알고리듬이 적용되지 않겠지요.
어쨌거나 자주 접속하는 사용자들의 비번은 대개 한달 안에 해시 알고리듬 변경이 완료될 것입니다. 반면, 아이디만 만들어 놓고 거의 접속을 안 하는 분들은 1년이 지나도 기존 알고리듬 그대로일 거고요. 그래서 기존 해시 알고리듬과의 호환성이 매우 중요한 것입니다. 다행히 해시 알고리듬들은 각각 고유한 특성이 있기 때문에 (md5 = 32자, sha1 = 40자, sha256 = 64자, bcrypt = 60자 등) 여러 알고리듬을 사용한 비번들이 DB에 섞여 있더라도 각각 어떤 알고리듬을 사용했는지 파악하는 것은 전혀 어렵지 않습니다.
-
Garon
2014.08.12 09:31
아... 그렇군요.
말씀 감사합니다. :)
XE의 보안이 강화되는 일이라면 XE 사용자들이 적극 참여해서 좋은 결과가 나올 수 있게 하는게 우리 모두에게 좋은것 같습니다.
이렇게 능력자 분들이 XE의 보안에 신경 써주셔서 감사하게 생각하고 있습니다...