웹 사이트 / 웹 응용 프로그램을 작성하는 프로그래머가 암호화를 이해해야합니까? 나는 대부분의 암호 알고리즘이 어떻게 작동하는지 전혀 모른다. 그리고 md5 / des / aes / etc의 차이점을 이해하지 못한다. 암호화에 대한 심층적 인 이해가 필요한 사람이 있습니까?
나는 그것을 필요로하지 않았지만 아마도 내가 뭔가를 놓치고 있는지 궁금합니다. salt + md5 해시를 사용하여 비밀번호를 암호화했으며 웹 서버에 SSL을 사용하도록 지시했습니다. 그 외에도 나는 다른 방법을 많이 사용했다고 말할 수 없으며 이러한 방법이 얼마나 안전한지 확실하게 말할 수 없습니다 . 나는 다른 사람들이 안전하다고 주장하기 때문에 사용합니다.
이 두 가지 간단한 예를 제외하고 웹 프로그래밍에서 암호화를 사용해야 할 필요성을 발견 한 적이 있습니까?
답변
웹 프로그래머는 절대 암호화 자체를 구현하려고 시도 해서는 안된다는 것을 알아야합니다 .
특히 이는 비보안 전문가가 암호화 기본 요소 중 하나를 직접 만지지 않아야 함을 의미합니다. AES, SHA-1 등의 수준에서 생각해서는 안됩니다. 대신, 고급 기능을 사용하여 메시지를 암호화 및 서명하고 암호를 “해시”해야합니다.
왜? 그렇지 않으면 사람들은 다음과 같은 생각으로 오도되기 때문입니다.
- AES-256은 ECB 모드에서 사용하거나 비 랜덤 IV 값 등을 사용한다는 사실에도 불구하고 “훌륭한 암호화”입니다 (일부 모드에서는 비 랜덤이지만 고유 한 IV는 괜찮습니다. 너무 많아요)
- 여러 메시지를 암호화하기 위해 동일한 대칭 키를 사용할 수 있습니다 (또는 직접 사용하기 위해 대칭 키를 코드에 저장).
- 키 파생 함수를 사용하지 않고 암호를 키로 직접 사용하기로 결정할 수도 있습니다.
- RSA를 사용하여 데이터를 직접 암호화 할 수 있습니다.
- 보안을 유지하기 위해 비밀번호를 “소금과 MD5″로 간단하게 지정할 수 있습니다. 레인보우 테이블이 가장 약한 링크 라고 생각하면 다시 생각하십시오 .
같은 페이지 에 있기 위해서는 위의 항목 중 어느 것도 괜찮습니다 . 그것을 얻지 못하면 10 피트 극으로 암호를 만져서는 안됩니다! (AES-256 은 훌륭한 암호화입니다. 그러나 올바르게 사용하는 경우에만 사용하십시오. “중요한 크기가 아니라 사용하는 크기입니다.”:-)
어떤 종류의 고급 기능에 대해 이야기하고 있습니까? 개인적으로 OpenPGP (사용하지 않는 데이터) 또는 SSL (동작중인 데이터) 라이브러리를 사용하는 것이 좋습니다. 이러한 프로토콜은 비대칭, 대칭 및 해시 알고리즘의 올바른 사용을 엄격하게 지정합니다. 예를 들어 OpenPGP의 경우 :
- RSA를 사용하여 데이터를 직접 암호화하는 대신 메시지 당 임의의 세션 (대칭) 키를 생성 (중요)하고 RSA를 사용하여 해당 세션 키를 암호화합니다.
- 그래도 PKCS # 1 v1.5 인코딩 (
EME-PKCS1-v1_5
)을 사용하여 세션 키를 채 웁니다 . 패딩은 RSA에 매우 중요합니다. ( 1.5 패딩을 사용하는 것이 좋다고 생각하는 사람들도 있고 OAEP가 더 좋다고 생각하는 사람들도 있습니다. )
- 그래도 PKCS # 1 v1.5 인코딩 (
- 키 파생 함수를 사용하여 암호를 키로 변환합니다. (OpenPGP 용어에서는 S2K라고하지만 “키 파생 함수”가 더 표준적인 용어라고 생각합니다.)
- 좋은 모드 선택을 처리하므로 ECB를 사용하지 않습니다.
- 키 관리를 처리하므로 신뢰할 수있는 키 등에 대한 임시 결정을 내릴 필요가 없습니다.
요약 : 보안 전문가가 아니고 AES 또는 SHA-1 또는 (허용 금지) MD5 수준에서 생각 하고 있다면 잘못하고있는 것 입니다. 보안 전문가가 작성한 보안 라이브러리 (예 : Bouncy Castle)는 보안 전문가가 설계 한 프로토콜 (암호화를위한 OpenPGP 또는 암호 해싱을위한 bcrypt 또는 scrypt 등)을 구현하는 라이브러리를 사용하십시오.
나는 어떤 방법으로도 암호 전문가가 아니지만 내 자신의 임시 프로토콜을 디자인하려고 시도하지 않을 정도로 충분히 알고 있습니다. 분명히하기 위해이 게시물 전체는 암호화 101 자료 입니다. 따라서이 게시물이 100 % 이해가되지 않으면 암호화 근처에 있지 않아야합니다.
답변
암호화에 관한 기본 사항 (해시 란 무엇인가, 소금이란 무엇인가,이 암호화 등을 해독하는 것이 얼마나 어려운지 등) 외에는 아무것도 알 필요가 없지만 보안에 대한 공정한 지식이 필요합니다 일반.
웹 개발자로서 반드시 알아야 할 주요 보안 영역 :
- SQL 주입. 이것은 아마도 웹 개발자가 시스템에 구멍을 뚫을 수있는 가장 위험한 구멍 일 것입니다.
- 사이트 간 스크립팅 및 쿠키
- 스패 보트와 보안 문자.
- SQL 주입. 이것이 얼마나 중요한지 충분히 강조 할 수 없습니다.
답변
보안에 대해 모든 엔지니어가 알아야 할 내용 및 학습 위치 라는이 강연을 본 기억이 있습니다 . 강연자는 Neil Daswani이며 Google 테크 강연으로 시작한 것이 좋습니다.
웹 프로그래머에게만 적용되는 것은 아니지만 “프로그래머가 보안에 대해 무엇을 알아야합니까?”라는 제목을 붙여야합니다. 암호화에 대한 기본 사항 이상을 알 필요가 없기 때문에 (그 자체로 재미있다)
답변
암호화는 많은 상황에서 유용합니다. 우리가 사용한 예는 LAMP 호스트에서 사용하기 위해 Win / IIS 호스트가 만들고 설정 한 세션 쿠키를 암호화하는 것입니다.
md5 / sha1 해싱과 달리 암호화를 구현하려는 경우 대칭 암호화와 비대칭 암호화의 차이와 같은 몇 가지 기본 용어가 중요합니다. 이 둘의 차이점을 이해하면서 웹 개발자가 암호 해독 키를 올바르게 저장하고 보호하기 위해 수행해야하는 작업에 대한 이해를 발전시켜야합니다. 예를 들어 공유 호스트와 같이 전체 관리 제어 권한이없는 호스트에 배포 할 응용 프로그램을 개발하는 경우와 모든 관리자를 알고 신뢰할 수있는 서버에 배포하는 경우가 있습니다.
답변
제 생각에는 코드를 공격하는 사람이 알고있는 암호화에 대한 모든 것을 알아야합니다. 해시, 솔트, 랜덤의 비 랜덤 성, 주요 암호화 알고리즘 (RSA, 3DES, AES 등), SHA-1 / MD-5 / et al.을 이해해야합니다. 그것들을 외울 필요는 없지만 해시 알고리즘의 효과와 그것을 강하게 만드는 방법을 알아야합니다. 충돌과 오 탐지가 무엇인지 알아야합니다. 암호화 알고리즘을 외울 수는 없지만 벤치 마크는 어느 시나리오에 가장 적합한 지 벤치 마크에 익숙해야합니다. 대칭 및 비대칭 암호화 및 사용시기를 설명하고 설명 할 수 있어야합니다. PKI가 무엇이며 어떻게 사용되는지 알아야합니다. 인증 기관이 무엇이며 인증 기관이 서버와 상호 작용하는 방법을 알아야합니다.
모든 것의 장단점을 아는 것이 그것의 배경을 아는 것만 큼 중요하지 않습니다. 특정 것들의 벤치 마크는 무엇입니까 (얼마나 빠르며 강약점 등).
이러한 권장 사항은 상급 또는 건축가 수준의 정보를위한 것입니다. 노를 젓는 웹 원숭이라면 이것에 대해 알 필요가 없습니다. 건축가가이 사실을 알아야합니다. 사이트를 관리하고, 디자인하고, 구현하는 등의 작업을 수행하는 경우 이러한 모든 개념을 잘 알고 지능적으로 대화 할 수 있어야합니다. 당신은 그것을 가르 칠 필요가 없으며 그것에 대한 정보를 받아들이고 전파하기 만하면됩니다.
답변
MD5 대신 bcrypt (Blowfish)를 사용하여 비밀번호를 저장 해야합니다 . 알고리즘이 훨씬 느리기 때문에 해커가 추측하고 확인하기가 훨씬 어렵습니다. 또한 bcrypt는 작업 요소 를 매개 변수로 사용하므로 새로운 컴퓨터가 도입되면 속도가 느려질 수 있으므로 미래를 보장하는 내장 기능이 있습니다.
자세한 내용은 암호를 안전하게 저장하는 방법을 참조하십시오 .
답변
이런 종류의 질문에 대한 일반적인 대답으로 나는 항상 당신이하는 일과 원격으로 관련된 것을 기본적으로 이해하려고 노력해야한다고 생각합니다. 물론 실제로 작업하고있는 것에 대한 구체적인 지식이 필요합니다. 어떤 영역이 어떻게 진화 할 것인지, “패션 적으로”무엇이 될 것인지, 미래에 무엇이 필요할 것인지를 예측하는 것은 매우 어렵습니다. 많은 문이 열렸습니다.
웹 프로그래밍에 대한 개인적인 경험으로 비대칭 암호화의 기본 개념을 발견했으며 그 내용은 후드 아래에서 무슨 일이 일어나고 있는지 이해하는 데 도움이되었습니다. 나는 그것 없이는 살아남을 수 있었지만 암호화와 수학을 좋아한다고 말해야합니다.