Web 크립토
클라이언트 측 (브라우저) 자바 스크립트의 암호화 관련 문제는 아래에 자세히 설명되어 있습니다. 이러한 우려 중 하나를 제외한 모든 것이 WebCrypto API 에는 적용되지 않으며 , 이는 현재 합리적으로 잘 지원됩니다 .
오프라인 앱의 경우 여전히 보안 키 저장소를 디자인하고 구현해야합니다.
따로 : Node.js를 사용하는 경우 기본 제공 암호화 API를 사용하십시오 .
네이티브 자바 스크립트 암호화 (WebCrypto 이전)
본인의 주된 관심사는 localStorage
귀하의 사이트에 대한 컴퓨터를 물리적으로 액세스 할 수있는 사람 이고 해당 액세스를 막기 위해 암호화를 원한다고 가정합니다.
누군가가 물리적으로 접근 할 수있는 경우 다른 것보다 더 공격 할 수 있으며 읽기보다는 열악합니다. 여기에는 키로거, 오프라인 스크립트 수정, 로컬 스크립트 삽입, 브라우저 캐시 포이즈 닝 및 DNS 리디렉션이 포함되지만 이에 국한되지는 않습니다. 이러한 공격은 사용자가 손상된 시스템을 사용하는 경우에만 작동합니다. 그럼에도 불구하고 그러한 시나리오에서 물리적 액세스는 더 큰 문제가 있음을 의미합니다.
따라서 로컬 암호가 유용한 제한된 시나리오는 컴퓨터를 도난 당했을 경우입니다.
원하는 기능을 구현하는 라이브러리가 있습니다 (예 : Stanford Javascript Crypto Library) . 그러나 @ircmaxell의 답변 링크에서 언급 된 바와 같이 고유 한 약점이 있습니다.
- 엔트로피 부족 / 난수 생성;
- 보안 키 저장소가 부족합니다. 즉, 개인 키는 로컬로 저장하거나 서버에 저장 한 경우 (오프라인 액세스가 금지됨) 암호로 보호해야합니다.
- 안전한 지우기 부족;
- 타이밍 특성 부족.
이러한 각 취약점은 암호화 손상 범주에 해당합니다. 다시 말해, 이름에 따라 "암호화"가있을 수 있지만 실제로는 열악한 수준보다 훨씬 낮을 것입니다.
그러나 보험 계리 적 평가는 "자바 스크립트 암호화가 약하고 사용하지 마십시오"만큼 사소한 것은 아닙니다. 이것은 보증이 아니며 엄격히 경고하기 때문에 위의 약점의 노출, 직면하는 벡터의 빈도 및 비용, 실패한 경우 완화 또는 보험에 대한 귀하의 능력을 완전히 이해해야합니다 : Javascript crypto, in 약점에도 불구하고 노출을 줄일 수 있지만 기술 능력이 제한된 도둑에 대해서만 노출됩니다. 그러나 Javascript 암호화는 해당 정보를 대상으로하는 결정적이고 유능한 공격자에 대한 가치가 없다고 가정해야합니다. 일부는 구현에 고유 한 취약점이 너무 많을 때 데이터를 "암호화"하는 것이 잘못 될 수 있다고 생각합니다. 다시 말해, 기술 노출을 약간 줄일 수 있지만 공개로 인한 재무 노출을 증가시킵니다. 물론 각 상황은 다르며, 재정적 노출에 대한 기술적 노출을 줄이는 분석은 쉽지 않습니다. 여기에 비유가 있습니다 :일부 은행 은 고유 한 위험에도 불구하고 약한 암호를 요구합니다. 약한 암호 로 인한 손실에 대한 노출은 강력한 암호를 지원하는 최종 사용자 비용보다 적기 때문입니다.
🔥 마지막 단락을 읽고 "Brian이라는 인터넷상의 일부 사람이 Javascript 암호화를 사용할 수 있다고 말합니다"라고 생각되면 Javascript 암호화를 사용하지 마십시오.
질문에 설명 된 유스 케이스의 경우 사용자가 로컬 파티션 또는 홈 디렉토리를 암호화하고 강력한 비밀번호를 사용하는 것이 더 합리적입니다. 이러한 유형의 보안은 일반적으로 잘 테스트되고 널리 신뢰되며 일반적으로 사용 가능합니다.