H2

2014-02-23 3 views
2

메모와 함께 보안 문제 : 내가 H2를 언급하고있어 비록, 이것은 어떤 DBMS에 적용 할 수있다, 당신은 하나의 파일에서 전체 데이터베이스를 저장할 수H2

  1. ;

  2. 소스 코드를 공개적으로 사용할 수있게합니다.

내 관심사 :

는 다음과 같은 일을 수행하여 암호화 된 H2 데이터베이스에 침입 할 수 있습니까?

  1. 크기가 매우 크고 0 인 BLOB를 일부 테이블에 저장합니다.

  2. 새로운 H2 데이터베이스 파일 바이너리를 검사하고 페이지/블록 경계 근처에서 반복되는 패턴을 찾으십시오. 페이지/블록 크기는 H2 소스 코드에서 얻을 수 있습니다. 이렇게 얻은 반복 패턴은 H2 데이터베이스를 암호화하는 데 사용되는 암호 키입니다.

  3. 일단 암호 키가 노출되면 해커는 H2 소스를 더 자세히 파고 테이블, 열 및 행의 정확한 구조를 파악할 수있을만큼 충분히 숙달해야합니다. 즉,이 시점부터 모든 것이 드러납니다.

나는 개인적으로 H2의 소스 코드를 공부하거나 I에게 암호 전문가,하지만 나는 위의 생각하는 이유 여기되지 않은 - 또는 위의 라인을 따라 몇 가지 해킹 - 작동 할 수 있습니다 :

  1. 성능상의 이유로 모든 DBMS는 청크 (페이지 또는 블록 크기가 512 바이트에서 8KB 크기)로 데이터를 읽고 쓰므로 H2도 마찬가지입니다.

  2. 크기가 수백 KB 인 BLOB는 DBMS의 페이지/블록 크기를 훨씬 초과하므로 사용자 암호를 사용하여 내부적으로 생성 된 암호 키가 페이지/페이지 크기보다 작은 반복 패턴으로 나타날 것으로 예상 할 수 있습니다. 블록 크기.

+1

설명 된 동작을 노출하는 모든 암호가 의도적으로 작동하지 않습니다. –

답변

3

좋은 암호 알고리즘은이 공격에 취약하지 않습니다.

일반 텍스트의 패턴 (여기에서는 0의 BLOB)은 암호문에서 분산됩니다. 비밀 키는 패턴이나 다른 방법으로 암호문에 쉽게 표시되지 않습니다. 블록 암호를 사용할 때 이전 블록의 암호문에 따라 블록의 암호화를 만드는 것이 고전적인 기술입니다. 여기에서 언급하는 블록은 암호화 알고리즘에 사용되는 블록으로 일반적으로 길이가 128 비트입니다.

예를 들어 평문 블록을 이전 블록 암호화의 결과로 XOR 할 수 있습니다. 여기에는 암호화 이전에 이전 블록의 결과를 현재 블록과 XOR하는 CKE 모드 용 Wikipedia의 스키마가 있습니다.당신이 볼 수 있듯이

CBC mode

, 당신은 각각의 평문 블록에 모두 0을 공급하더라도, 당신은 완전히 무작위보고 결과와 함께 종료됩니다.

이들은 단지 예제 일 뿐이며 H2에서 사용되는 실제 혼동 메커니즘은 사용하는 알고리즘에 따라 더 복잡하거나 복잡 할 수 있습니다.

+0

비록 각 crypto 블록이 CBC에서 다를지라도 데이터베이스 페이지 전체 (일반적으로> crypto 블록)에서 반복 패턴을 볼 것으로 예상됩니다. 내 관심사는 암호 알고리즘의 건전성에 관한 것이 아니라 위에서 설명한 유형의 공격을 방지하기 위해 H2가이를 사용하는 방법에 관한 것이 었습니다. H2의 소스 코드가 공개되어 있기 때문에 모든 해커가 사용되는 난독 화 메커니즘을 발견 할 수 있으므로 걱정할 필요가 없습니다. – Harry

+1

동일한 데이터를 포함하는 두 개의 데이터베이스 페이지가 동일한 암호문을 생성하지 않는 구성표를 사용하는 것이 가능하고 바람직합니다. 이것은 예를 들어 TrueCrypt와 같은 디스크 암호화 소프트웨어를 사용할 때 명확합니다. 512 바이트 디스크 섹터는 종종 동일한 데이터를 포함하지만 다른 암호문으로 암호화해야합니다. –

+2

코드가 오픈 소스라는 사실은 이론 상으로는 좋은 것입니다. 열쇠를 제외한 모든 것이 공개되어야합니다. 우리는 침입자가 독점 코드에 액세스 할 수 있다고 가정 할 수 있으므로 공개 및 동료 검토가 더 좋습니다. H2에서 암호화가 사용되는지, AES-XTS와 유사하게 사용되는지 등을 파헤 치려고합니다. 실제로 구현은 종종 가장 취약한 지점입니다. –