2010-12-11 4 views
3

저는 절대적으로 중요한 데이터를 포함하는 프로젝트 개념을 다루고 있습니다.웹 서버가 해독 중입니까?

가장 중요한 부분은 암호화하여 저장해야한다는 것입니다.

웹 서버가 파일을 제공하는 암호화 된 파일 시스템으로는 충분하지 않습니다.

데이터를 해독하는 키는 해시 및 타임 스탬프와 함께 보안 연결의 요청 URI로 전달되어야합니다.

타임 스탬프를 기반으로하는 해시 키와 파일 이름은 URI의 유효성을 검사하여 목록에 저장하므로 한 번만 액세스 할 수 있습니다.

중요한 부분은 웹 서버가 디스크에서 파일을 가져 와서 요청 URI에서 얻은 키를 사용하여 암호를 해독해야한다는 것입니다.

또한 효율적이고 빠릅니다. 또한 전체 파일을 검사 할 필요가없는 암호화 방법이 필요합니다. 파일을 점진적으로 해독 할 수 있습니다. 나는 AES가 원자 단위로 암호화 된 특정 블록 크기로 이것을 할 수 있다고 생각한다.

그래서 한 옵션은 소스 파일을 PHP 스크립트로 읽는 것입니다.이 스크립트는 aes를 사용하여 암호를 해독하고 해독 된 내용을 인쇄합니다. 그런 다음 스크립트는 이전 데이터를 잊어 버리고 eof까지 다음 청크로 계속 진행합니다.

만약 내가 정의 된 파일 크기의 덩어리를 별도로 암호화 할 수 없다면, 파일을 제공 할 때 그것들을 연결하고 똑같이 할 수 있습니다. 그러나 내가 발명하지 않아도되는 하나의 표준을 고수하고 싶습니다. 표준 라이브러리를 사용하여 파일을 암호화 할 수도 있습니다.

그러나 이것은 매우 비효율적입니다.

apache/lighttpd/nginx 모듈이나 더 나은 방법을 알고 있습니까?

+0

음 ...'mcrypt_decrypt()'를 사용하면 어떨까요? // 편집 : 성능 문제에 대해 잘 모르겠다 ;-) – thedom

+0

내가 스크립트에서 그렇게한다면. 하지만 파일을 웹 서버, PHP 출력 버퍼를 사용하여 싶습니다 .... –

+0

내가 지금 생각할 수있는 유일한 솔루션은 해시, PHP에서 타임 스탬프를 확인하고 http://php.net/manual /en/function.passthru.php –

답변

3

파일을 nmap()으로 열고 필요에 따라 즉석에서 데이터를 암호화해야합니다.

네이티브 C 스크립트 AES 암호화 (C 스크립트가 기존 라이브러리와 링크 할 수있는 경우에도 외부 라이브러리가 필요 없음)를 제공하는 G-Wan (200KB)보다 더 적합한 것이 없습니다.

최상의 실적을 달성해야하는 경우 가야합니다.

+0

내 길을가는 것처럼 보이는 아주 좋은 –

1

PHP의 스트림 필터 (http://php.net/stream.filters); 글루 코드를 사용하면 일반 PHP 파일 액세스 기능을 사용하여 암호화 된 파일을 읽을 수 있으며 기존 코드에 대부분 투명하게 적용됩니다.

1

파일을 청크/블록 단위로 해독 할 수있는 PHP 모듈을 찾을 수없는 경우 파일을 적절한 크기의 블록으로 미리 분할하고 각각을 별도로 암호화 할 수 있습니다.

물론 한 번에 작은 텍스트 조각 만 보내는 경우에도 특히 웹 서버의 출력 버퍼에서이 취약한 데이터를 보관할 수있는 장소가 많이 있습니다. 2400 보오 모뎀을 사용하는 사람이 다운로드 한 대용량 파일의 극단적 인 경우를 생각해보십시오. 첫 번째 청크가 다운로드되기 전에 전체 파일의 암호를 해독하고 대기열에 넣을 수 있으므로 전체 파일을 어딘가에 버퍼에 그대로 둡니다.

+0

사실. 그리고 그것은 PHP로가는 것만이 유일한 방법이기 때문에 이렇게 할 것입니다. –

+0

좋은 지적 - 입력을 필요로하는 체인의 마지막 단계로 자바 스크립트 (보기 용) 또는 클라이언트 측 암호 해독 모듈을 사용합니까? HTTPS 캐싱이 특별히 활성화되어 있지 않으면 서버 및 클라이언트의 HTTPS 경로가 일반 HTTP에 비해 강화된다는 추가 이점이있는 HTTPS도 사용된다고 가정합니다. – SilverbackNet

1

필요한 것을 제공 할 수있는 기성품 해결책이 없습니다. 그리고 데이터에 대한 약간의 정보를 제공하는 동안, 데이터가 처음에 웹 서버에 어떻게 도달 할 지에 대한 단서를 많이 제공하지 않았습니다.

데이터가 손상되지 않도록 많은 노력을하고 있지만 서버에서 해독하는 경우 데이터가 손상 될 위험이있을뿐만 아니라 열쇠가 손상 될 것입니다. 즉 건축물의 소재보다 극장이 더 많습니다.

암호화에 사용 된 알고리즘은 아키텍처에 대해 어느 정도 제어가 가능하다는 점에서 유연성이 뛰어납니다. 따라서 이러한 문제를 해결할 수있는 범위가 있습니다.

타임 스탬프를 기준으로 해시, 키 및 파일 이름이 URI의 유효성을 검사하고 목록에 저장하므로 한 번만 액세스 할 수 있습니다.

어떻게 한 번만 액세스 할 수 있습니까? 확실히 그것은 CSRF의 기회 창을 줄이기 위해 사용될 수 있지만 그것을 제거하지는 못합니다.

그런 다음 스크립트는 이전 데이터를 잊어 버리고 eof까지 다음 청크에서 계속됩니다.

이것은 근본적 암호화의 목적을 훼손 - 데이터 내의 패턴을 여전히 명백하다 - 이는 데이터에 대해 무차별 공격을 활용하는 machanism 제공 - 블록의 크기가 비교적 큰 경우에도. 간단한 데모를 위해 the images here을 살펴보십시오.

훨씬 더 안전한 방법은 CBC를 사용하고 클라이언트에서 암호화/암호 해독을 수행하는 것입니다.

몇 가지 암호화 알고리즘 (AES 포함)의 자바 스크립트 구현이 있습니다. this page에는 좋은 툴킷이 있습니다. HTML5/localstorage를 사용하면 HTML/자바 스크립트로 완벽한 클라이언트 응용 프로그램을 구축 할 수 있습니다.

독창적 인 암호화 알고리즘을 사용한다고해서 응용 프로그램의 보안이 보장되는 것은 아닙니다. 사용하는 방법에 대해 걱정하기 전에 돌아가서 데이터를 저장하고 검색하는 방법에 대해 생각하는 것처럼 들립니다. 그것을 암호화하기 위해.

+0

고맙습니다. +1에 감사드립니다. 주요 관심사는 전체적으로 서버를 가져 오는 것입니다. 그것으로 모든 데이터를 해독하는 것은 불가능해야합니다. 클라이언트가 링크에서 키를 전달해야하는 이유입니다. 액세스 목록은 누군가가 손상된 프록시 또는 뭔가를 서핑하는 경우 재생 공격을 피하기위한 것입니다. https에 대한 이유이기도합니다.물론 클라이언트 측 솔루션 만이 정말로 안전 할 것입니다. 나는 그것을 지금 고려할 것이다. 사용 된 암호화 알고리즘이 포함됩니다. 나는 "검색"이 청크 현명한 암호화로만 가능하다고 생각했습니다. 그걸 좀 더 살펴볼 것입니다. –

관련 문제