2010-05-25 3 views
0

중요한 정보가 포함 된 TCP/IP 트래픽을 암호화하기 위해 서버 및 클라이언트 응용 프로그램에 AES 256 비트 암호화를 추가합니다. 우리는 매일 키를 돌릴 것입니다. 따라서 키는 응용 프로그램과 함께 메모리에 저장됩니다.응용 프로그램의 메모리를 변조로부터 보호

키 분배 과정 : 각 서버와 클라이언트가 일

  • 에 의해 초기 키 암호화 키의 (KEK)의 목록을해야합니다

    1. 클라이언트는 그냥 시작하는 경우 또는 서버는있다 시작되면 클라이언트는 초기 키를 사용하여 서버에서 일일 키를 요청합니다. 서버는 초기 키로 암호화 된 일일 키로 응답합니다. 일일 키는 임의로 생성 된 영숫자 집합입니다. 우리는 AES 256 비트 암호화를 사용하고 있습니다.

    2. 모든 후속 통신은 해당 일일 키를 사용하여 암호화됩니다.

    3. 밤마다 클라이언트는 현재 일일 키를 현재 KEK로 사용하여 서버에서 새로운 일일 키를 요청합니다. 클라이언트가 새 키를 얻으면 새로운 일일 키가 이전 일일 키를 대체합니다.

    다른 잘못된 응용 프로그램이이 메모리에 불법으로 액세스 할 수 있습니까? 아니면 Windows에서 보호되어 있습니까? 키는 파일에 쓰여지지 않고 메모리의 변수에만 저장됩니다.

    응용 프로그램이 메모리에 불법적으로 액세스 할 수있는 경우 어떻게 메모리를 조작하지 못하도록 할 수 있습니까?

    우리는 C++과 XP를 사용하고 있습니다 (Vista/7은 향후 옵션이 될 수 있으므로 답변이 변경되는지는 잘 모릅니다).

  • +2

    시스템이 아직 설계 및 구현 프로세스에서 유연한 단계에있는 경우 자체 암호화 시스템을 포기하고 SSL/TLS를 사용하여 클라이언트와 서버 간의 통신을 안전하게 유지하려는 경우가 있습니다 암호화 전문가가 개발하고 인증 한 타사 라이브러리). – Kitsune

    답변

    3

    나는 당신이 당신의 손에 근본적인 문제가있을 것이라고 생각합니다.

    이 컴퓨터가 루트킷을 잡을 가능성이 희박하더라도 모든 키가 그대로 있습니다. 의 어느 아래에 해당하는 경우

    Windows에서

    , 프로세스 A가 프로세스 B의 메모리를 읽을 수 있습니다

    1. 이는 메모리 장치를 열 수있는 권한을가집니다.
    2. 프로세스 B의 가상 메모리를 열 수있는 권한이 있습니다.
    3. 커널에 친구가 있습니다.

    기계에서 실행중인 것을 완벽하게 제어하고 아무도 놀라움을 선사 할 수 없다는 확신을 갖고 있다면 황금이됩니다.

    물론 이것은 Windows에서만 고유하지 않습니다. Windows에만 고유 한 것은 루트킷 맬웨어의 양입니다.

    +0

    그래서 Windows DPAPI를 사용하여 키를 저장 한 다음 응용 프로그램의 메모리 공간으로 가져 와도 여전히 망가졌습니다. 이것은 매우 고무적이지 않습니다 :) 당신이 안티 바이러스와 최신 업데이트가 필요한 이유가 무엇인지 추측합니다. –

    +0

    그냥 창을 좁 힙니다. 키가 메모리에 잠깐 등장하는 경우에도 키가 손상 될 수 있습니다. 어떤 사람들은 보호해야 할 정보가 매우 높은 경우 Windows를 사용하는 것이 너무 위험하다고 말합니다. – bmargulies

    +0

    신용 카드 정보와 요구 사항이 다소 엄격합니다. 유일한 방법은 루트킷 시나리오를 방지하는 데 도움이되는 다른 완화 요소를 프로그램하는 것입니다. –

    4

    키 배포 프로세스가 안전하지 않습니다. 누군가가 초기 키 세트를 얻으면 그 것이 모두 끝납니다.

    예, 다른 응용 프로그램은 디버거 후크를 사용하여 Windows에서 프로세스 메모리에 액세스 할 수 있으며이를 막을 수있는 방법은 거의 없습니다. 본질적으로 상자가 어떤 방식 으로든 손상되면 사용자가 수행 할 수있는 작업이 거의 없습니다.

    2

    또 하나의 정보는 디스크에 직접 키를 쓰지 않아도 어쨌든 끝날 수 있습니다. 필요한 것은 가상 메모리 시스템이 키를 보유하고있는 메모리를 페이지 아웃하는 것뿐입니다.

    다른 사람들이 당신이 상자를 믿을 수 없다고 지적한 것처럼 어쨌든 당신은 망쳐 있습니다. 기본적으로 암호화 작업을 더 잘 제어 할 수있는 도터 카드로 옮기는 방법으로 몇 가지 추가 하드웨어를 사용하여 이러한 종류의 보안을 강화하는 방법이 있습니다. 이것이 일부 금융 기관 및 일부 정부 기관에서 사용하는 기법입니다. 그래도 예산 범위 밖일 수도 있습니다.

    +0

    고객이 키를 변경하기가 너무 쉽기 때문에 키 순환을 위해 쉽고 편리하게 중요한 정보를 안전하게 전송할 수있는 방법을 찾고 있습니다. SSL은 의문의 여지가 없습니다. –

    +1

    고객에게 깃털 덮인 머리를 쑤셔 넣을 모래 구덩이를 고객에게 제공하고 있다고 주장 할 수 있습니다. 그러나 비즈니스 컨텍스트를 알지 못해도 확신하기 어렵습니다. – bmargulies

    1

    다른 프로세스가 프로세스의 메모리를 읽지 못하게하는 방법은 없습니다.

    무자격 공격에 대한 저항력을 강화하려면 무작위로 생성 된 키를 사용하여 실제 키를 사용하지 않는 동안 암호화하는 것이 좋습니다. 프로그램이 실행될 때마다 새로운 임의의 KEK를 생성 할 수 있으며, 프로그램이 몇 초마다 실행되는 동안 변경 될 수도 있습니다. 실제로 "진짜"키를 해독 할 필요가있을 때만 해독하고, 끝나면 열쇠가있는 곳의 메모리를 즉시 제로로 만드십시오.

    물론 의사 소통을 계속하는 경우에는 실제로 작동하지 않습니다. 그러나 통신이 대부분 유휴 상태이고 트래픽이 급격히 증가하는 경우에만이 접근 방식이 효과적 일 수 있습니다.

    +0

    흥미로운 접근 방법. 나는 이것을 들여다 볼지도 모른다라고 생각한다. –

    관련 문제