답변 감사합니다. 도움이 많이 되었습니다.
>>김경하 님께서 쓰시길<<
:: 복호화가 불가능한 걸로 알고 있습니다.
:: 복호화가 가능할려면 Key가 있어야 하는데, Key가 있으면 또 그 Key는 어떻게 관리해야 하는가 하는
:: 문제가 생기죠.
:: (그 Key가 노출된다면 모든 비밀번호가 노출되는게 됩니다 -> 보안의 취약점)
:: 그래서, 비밀번호 같은 경우에는 복호화가 가능한 암호화가 아니라,
:: 단방향 암호화(보통 Hash 함수 같은 걸 많이 씁니다)를 해서, 복호화가 불가능하게 저장합니다.
::
:: Netscape LDAP의 경우 userPassword에서 UNIX Crypt나 SHA-1 알고리즘으로 단방향 암호화해서 저장하
:: 는 걸로 알고 있습니다.(옵션으로 선택 가능)
::
:: 암호를 확인하는 방식은 2가지가 있는데, 보통 첫번째 방법을 씁니다.
::
:: 첫번째는 Bind를 시도해서 성공여부로 인증을 하는 겁니다.
:: 해당 사용자의 ID/PW로 LDAP에 Bind해서 LDAP_SUCCESS가 떨어지면 비밀번호가 맞다고 보는 거죠.
:: 그런데, 이경우 보통 사용자는 ID정보만 입력하지만 실제 LDAP에 BIND할때는 DN을 사용하게 됩니다.
:: 그래서, 보통은 Anonymous나 관리자로 LDAP에 bind해서 해당 id를 검색하여 해당 id가 존재하는지 여
:: 부를 판단한후 그 id에 해당하는 DN을 가져온 후 다시 DN과 사용자가 입력한 비밀번호로 bind를 시도해
:: 서 성공여부를 확인하는 거죠.
:: 1. 관리자로 Bind
:: 2. ldap_search( ..., "(uid=xxx)", ... );
:: 3. ldap_get_dn()
:: 4. ldap_bind( DN, 비밀번호, )
:: -> SUCCESS : 인증성공
:: 5. ...
::
:: (*) 주의 : LDAP API 에서 비밀번호나 ID 중 하나가 NULL인 경우 무조건 Anonymous bind로 인식하기
:: 때문에 사용자가 입력한 비밀번호가 NULL이 아닌지 반드시 사전에 체크해야 합니다.
::
::
:: 두번째는 LDAP에서 위의 UNIX Crypt나 SHA-1 중 어느 알고리즘으로 되어 있는지 확인한 후 사용자가
:: 입력한 비밀번호를 같은 알고리즘으로 단방향 암호화 한 후에 LDAP에 있는 userPassword랑 비교하는 거
:: 죠.
:: 여기서 주의할 점은 Netscape LDAP의 경우 userPassword를 ldap_get_value()할 경우,
:: 암호화 방식에 따라 {CRYPT}나 {SHA}라는 문자라 딸려 오기 땜에 반드시 이부분을 떼어낸 값이랑 비교
:: 해야 합니다.
::
:: 그럼...
::
::
:: >>lriss 님께서 쓰시길<<
::
:: :: ldap에서 기본적으로 지원하는 attribute 중 하나인 userpassword를 기본적으로 제공하는 암호화
:: 방
:: :: 식으로 암호화를 시켰는데 나중에 복호화를 시켜서 보거나 비교를 할려면 어떻게 해야 합니까? 메
:: 소드
:: :: 를 지원하지는 않는지요? jndi로 구현을 할려고 하는데 어떻게 해야 할지 몰라서 글을 올립니다.
:: :: 답변 부탁 드립니다.
|