비밀번호와 보안 - 어떤방법이 현명한 방법인가?

1day1의 이미지

http://kldp.org/node/73809
http://kldp.org/node/70568

비밀번호의 암호화

 * 암호화 하지 않고 평문으로 그대로 저장.
 * 내부 암호화로 저장(decode 가능)
 * decode 불가한 암호화로 저장

비밀번호 분실시 처리방법

 * ID 와 비번을 이메일로 보내준다.(초기가입시)
 * 사이트 상에서 주민번호/이름/이메일 정도를 확인하고
  1. 사이트 상에서 123*** 식으로 보여준다.
  2. 위와 같은 식으로 이메일로 보내준다.
  3. 그냥 전체 비밀번호를 보여준다.
  4. 직접 보여주지 않고, 일회용 비번을 이메일로 발송하고 비번을 다시 설정하는 방법
 * 연상 주제어 같은 것을 정해서 알아 맞추는 방식도 있음

비밀번호 와 함께 주민번호를 받는 사이트들의 주민번호의 처리

 * 그냥 주민번호 그대로 저장
 * 주민번호도 암호화해서 저장(decode 가능 or 불가)

최근 유행하는 초대방식인 경우
초대인증키(?)를 이메일로 전송하고 가입받는 형식을 취함. (비밀번호 처리는 위의 방식중에서)

여러 방식들이 있겠지만, 가장 좋다고 생각되는 방법

1. 우선 이메일로 보내는 방식이 나을 듯
 - 완전한 보안을 장담할 수는 없지만, 주민번호를 어느정도 대체할 수 있는 효과가 있음.
2. 주민번호를 받아야 한다면, 이것도 암호화 해서 저장(decode 불가)
3. 물론 당연히 비밀번호도 암호화해서 저장(decode 불가)
 - 암호화는 내부 및 외부로부터의 유출에 대비해서 효과가 있음
4. 비밀번호를 찾는 방법은 이메일로 일회용 비번을 발송하는 방법
 - 일회용비번이 이메일전송시 유출될 수 있다는 가정하에도 그나마 안전함.

보다 나은 방법을 알고 있다면.. 코멘트를...

.
.
.

ps. 이름과 주민번호로 너무 많은 정보를 얻을 수 있는 곳이 상당히 많음.
특히 관공서쪽에 그런 사이트들이 꽤 있음.

댓글

송효진의 이미지

비밀번호를 암호화 해야 하는 이유는 한 사람이 만드는 암호는 거의 일률적이기 때문에,
관리자가 악용하거나, DB 유출시 타 사이트에 악용될 수 있기 때문이죠.
단방향 암호화가 당연한 조치라고 생각됩니다.
php 의 md5 crypt 처럼 매번 생성시 마다 값이 다르게 만들어지면 더 좋죠.
분실시는 이메일로 새로 만들어 발송하고요.

주민등록번호의 경우, 대부분은 아예 받을 필요가 없다고 생각되고,
(중복 가입을 막기 위해서라면 이메일 정도면 충분할듯 하네요.)
성인인증 만을 위한 것인 경우 유료 모듈을 탑재해야 하므로,
주민번호를 복호화 안되게 저장하는 것은 아까운(?) 행위라고 생각되고,
거래를 위해 받는 경우는 '무통장입금' 을 제외하면,
PG사의 솔루션에 의해 실명인증이 되므로 주민번호를 저장할 필요가 없다고 생각됩니다.
문제발생시 PG사 혹은 사이버수사대에 의뢰하면 되겠죠.
거래액수가 커서 불안하면, 복호화 되게 저장해야 겠죠.

emerge money

송효진의 이미지

<?php

$passwd = 'asdf';

$crypted = crypt($passwd); // md5 연동

if($crypted == crypt($passwd, $crypted)) {
//맞다
} else {
//안맞다
}

?>

php5 에서는 blowfish 등의 다른것과 연동되기도 합니다.
./configure 에서 설정 가능한 듯 하네요.

emerge money

익명사용자의 이미지

그럼 다음번에 암호비교 할때는 어떤 방식으로 하는건가요?

mrjh76의 이미지

php md5는 잘 모르겠지만,,, 일반적으로 crypt 이라는 함수를 보면...
char *crypt(const char *key, const char *salt);
salt 값을 넣게 되어 있습니다.

즉, salt 값을 어떻게 넣느냐에 따라... 매번 만들어지는 암호가 같을수도 다를수도 있지요!
보통은 시간, 랜덤 값등을 넣어... 같은 문자열에 대해서도 매번 다르게 암호화된 값을 생성합니다.

그리고 암호를 비교할때는...
암호화된 문자열의 처음 두글자가... 입력된 salt 키입니다.

즉,,, 사용자가 입력한 문자열과 암호화된 결과물의 첫 두글자 salt 키를 넣어서 암호화하여,,, 그 결과로... 비교합니다!

jun92인데요 로그인하기 귀찮아서..;;의 이미지

md5는 단방향 해쉬 알고리즘으로 아직까지 collusion이 일어나지 않은 알고리즘 이라고 알고 있습니다.

비번이 1234 라면 md5값은 항상 81dc9bdb52d04dc20036dbd8313ed055를 갖게 되어있죠
저장은 md5값을 하게 되고요, 로그인시에 비번 비교는, 사용자에게 입력받은 값을
같은 방법으로 md5하고나서 그 값을 디비에 저장된 값과 비교하게 하면됩니다.

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

md5 충돌이 생긴지는 꽤 오래되었습니다.
http://kldp.org/node/39283

alee의 이미지

솔직히 사용자 입장에서는 비밀번호를 분실했을 때 임시 비밀번호를 이메일을 통해서
보내주는 방식은 조금 불편한 것 같습니다. 일단 임시 비밀번호로 로그인한 다음에 다시
정보 수정 페이지를 찾아 들어가서 패스워드를 변경하고··· 하는 것이 상당히 귀찮습니다.
게다가 임시 비밀번호를 확인한 후에 메일을 삭제했는데, 로그인해서 비밀번호 변경하는
것을 잊어먹고 그냥 로그아웃 해 버리면 다음번에 같은 짓을 또 반복해야 합니다.

제 생각에는 메일로 임시 비밀번호를 보내주는 것 보다는 차라리 아래와 같은 식의 링크를
하나 보내 준 다음에 해당 링크에 접속하면 직접 새 비밀번호를 설정할 수 있도록 해 주는
것이 훨씬 편리할 것 같습니다.

http://domain/changepassword.php?key=92b0da4e7dd8a91425b23225037e7401

그러면 바로 그냥 클릭해서 새로운 비밀번호를 설정하고, 그 비밀번호로 로그인하면 될
테니까요. 키 길이를 얼마든지 길게 할 수 있으니 기껏해야 10자리 정도 되는 임시 비밀번호
보다는 혹시 뒤에서 누가 메일 내용을 엿보더라도 유출될 염려가 적지 않을까 생각합니다.
또, 메일을 발송한 시점에서 1시간 동안만 해당 링크가 유효하게 한다던가 하는 식으로
하면 조금 더 안전해지겠죠.

익명사용자의 이미지

1시간 이내에 메일이 전달된다고 어떻게 보장하죠?

alee의 이미지

당연히 못하죠.
1시간 안에 안 오면 다시 신청해야죠.

kornet의 이미지

지난 학기에 제가 가르치는 학생들에게 수업사이트에 가입하도록 했는데..
메일주소가 대부분 다음이더군요..
다음으로 가입한 학생들에게는 메일이 가지 않는 불행한 사태가 발생했습니다.
다음으로 가입하지 말라고 했더니 학생들의 엄청난 항의.. 난감..

블루스크린의 이미지

다음이 ip등록정책을 포기한 것 같던데...

이상하네요

-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.

kall의 이미지

본문에 '지난학기'라고 되어있으니 올봄이었겠네요..
다음에서 IP등록제 없앤건 여름이었으니..

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.