취업가능할까01
102
2021-07-28 14:54:05 작성 2021-07-28 15:04:40 수정됨
7
403

파일 저장시 암호화[단방향] 질문드립니다.


md5 단방향 으로 암호화한다고 봤습니다.

또한 '아무개'로 md5('아무개') 했을때 abcd001 값이 나오면 md5는 유동적으로 변하는 해시알고리즘이 아닌

계속 abcd001로 나오더라구요


그러면 궁금한게 예로들어

제가 파일이름 '유출되면안되는영상' 으로 md5암호화시  qwer01020305값이 나와 서버에저장하고

DB에는 '유출되면안되는영상' 으로 원본파일이름을 저장했을시에


해커가 DB를 뚫고 '유출되면안되는영상'을 확인했다고 가정하에 

해커가 똑같이 md5암호화 이용하여 '유출되면안되는영상' 를 돌리면 qwer01020305가 나올테고 


서버까지 뚫으면 qwer01020305 값을 통하여 유출되면안되는영상을 확인할수있는게 아닌가요??

0
  • 답변 7

  • Dev.kerberos
    944
    2021-07-28 14:59:14

    무슨말인지 잘이해는안가나

    단방향암호랑 salt 관련해서 찾아보심이..

    https://st-lab.tistory.com/100

  • HJOW
    4k
    2021-07-28 15:00:12 작성 2021-07-28 15:02:23 수정됨

    서버를 뚧고, 암호화하는 프로그램을 얻었다면 그건 방어에 실패한겁니다.

    애초에 서버가 뚧리면 안되는것이죠.


    단방향 암호화의 장점은,

    역방향으로 원본 내용을 찾기가 "어렵다" 라는 것입니다.



    해커가 암호화된 데이터 qwer01020305 를 가지고 있다고 해봅시다.

    해커는 이 원본 내용을 알고 싶어요.


    이것만 가지고 "유출되면안되는영상" 이라는 내용을 알 수 있을까요?

    하나하나 넣어보면 언젠가는 되기야 하지만 그때 가서는 의미가 없죠.



    그리고 서버에 파일로 암호화해서 저장하고

    DB에 원본을 저장한다 라는 얘기는

    DB만큼은 절때 뚧리지 않겠다 ! 라는 의미이기도 합니다.

    사실 웬만한 내용들은 대부분 DB에 있겠죠.

    그래서 서버를 2차 방어선, DB를 최종 방어선으로 취급하는 곳도 있습니다.

  • 제타건담
    8k
    2021-07-28 15:03:18

    요즘은 md5 암호화 알고리즘은 사용하지 않습니다..

    지금은 md5도 보안에 취약하기 때문이죠..

    다른걸로 바꾸세요..

    그리고 okky 사이트의 Editor's Choice에 보시면 kenu님이 올려주신 자바 웹 개발자를 위한 가이드가 있는데 그 자료를 보시면 암호화 알고리즘으로 사용하지 말아야 할 것들이 정리된게 있습니다..

    물론 거기에도 md5가 있죠..


  • 취업가능할까01
    102
    2021-07-28 15:08:02

    이해가 확되었습니다 다들감사합니다

  • 연습용더미1
    935
    2021-07-28 15:41:30

    암호라는 것은 '절대 뚫리지 않는 방어'가 아니라 '얻는 결과가 무색하게 뚫기 어려운 것'이 목표입니다. 

  • Felix Cho
    107
    2021-07-28 15:44:07

    Hash 알고리즘으로 암호화를 하시려면 

    Hash[원래 데이터] => Hash값

    이렇게 하시면 Hash 알고리즘이 노출되면 모든게 다 노출된겁니다.

    좀 더 안전하게 하시는 방법은

    Hash[원래 데이터 + Salt 값] => Hash 값

    으로 작업하시면 Salt값을 모르면 해결을 할 수 없기 때문에 좀 더 안전합니다.

    Salt값은 

    1. 그냥 고정값을 사용하는 방법 (덜 안전)
    2. 자체 알고리즘을 이용해서 원 데이타에 따라 변경되도록 하는 방법 (좀 더 안전)

    등이 있습니다.

    Hash 알고리즘도 종류가 많은데, 어떤 알고리즘을 쓸지 정하기 위해서 저는 미국 NIST(National Institute of Standards and Technology)사이트를 확인합니다. (NIST-Policy-on-Hash-Functions). 지금 확인해 보니 최소한 SHA-256을 사용하라고 명시되어 있네요.


  • Hide_D
    854
    2021-08-08 02:03:16 작성 2021-08-08 02:21:25 수정됨

    질문하신 의도에 올바른 답은 salt를 쓰면 알아내기 어렵다. 입니다.

    물론 salt를 쓴다 한들 서버 DB가 털린 상황에서 DB에 있는 모든 salt를 이용하여 하나하나 대조해보면, 서버에 그 파일이 올라갔는지 확인할 수 있긴 합니다만...


    일반적으론 그런걸 어렵게 하기 위해...


    digest = 원본데이터
    salt = os.urandom(16) #랜덤값!
    for _ in range(10000):
      digest = hash(digest + salt) #여러번 반복!
    

    요런식으로 여러번 반복해서 해시값을 생성하기 때문에 오래 걸리긴 합니다.


    그럼에도 불구하고 해커가 충분한 컴퓨터 성능과 '의지'를 가지고 있다면 찾아낼 순 있습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.