2009-07-24 3 views
1

많은 회사의 고객이 데이터 수집 소프트웨어를 연구 기반으로 사용합니다. 일반적으로 연구의 성격으로 인해 일부 고객은 데이터가 변조되지 않도록 암호화되어 있는지 확인합니다. 데이터가 위조 된 것으로 밝혀지면 심각한 파급 효과가 발생할 수 있습니다.파이썬 : 데이터 변조를 막기위한 암호화

우리의 바이너리 소프트웨어 중 일부는 소스에 저장된 암호로 출력 파일을 암호화합니다.이 파일은 임의의 문자처럼 보입니다. 소프트웨어 수준에서는 읽기 전용 작업을 위해 암호화 된 파일을 열 수 있습니다. 누군가 이 실제로 인 경우 데이터를 변경할 수 있도록 암호를 찾으려면 가능하지만 많은 작업이 필요합니다.

다른 소프트웨어를 신속하게 개발하기 위해 Python을 사용하려고합니다. 데이터 변조를 막기/막기 위해 암호화 기능을 복제하기 위해 필자가 지금까지 생각해 낸 가장 좋은 아이디어는 파일 읽기/쓰기 작업을위한 DLL과 함께 ctypes을 사용하는 것입니다. 따라서 암호화 및 암호 해독 방법이 "충분히 "난독 화.

우리는 "해독 할 수없는"방법을 얻을 수 없다는 것을 잘 알고 있지만 동시에 Python 소스 코드에 일반 텍스트로 암호화/암호 해독 접근법을 사용하는 것에 만족하지는 않습니다. "데이터 변조에 대한 매우 강력한 실망"이 충분히 좋을 것이라고 생각합니다.

파이썬을 사용하여 암호화 또는 다른 데이터 무결성 증명의 행복한 매체를 얻는 최선의 방법은 무엇입니까?another post은 "변조 증거"를 생성하는 것을 말하지만 순수한 파이썬에서 서명이 생성되면 임의의 데이터에 대한 서명을 생성하는 것은 간단합니다. 은 데이터 무결성을 입증하기 위해 집에 전화를 걸 수 있지만 관련 모든 사람에게 큰 불편을 끼치는 것처럼 보입니다.

답변

12

일반적으로 변조를 방지하기 위해 암호화를 사용하지 않고 디지털 서명을 사용하려고합니다. 암호화는 기밀성을 제공하지만 무결성 이후입니다.

데이터에 해시 값을 계산하고 위조 할 수 없거나 디지털로 서명 할 수있는 위치에 해시 값을 저장하십시오.

귀하의 경우에만 귀하의 소프트웨어가 파일을 생성 할 수 있도록하려는 것 같습니다. 말하듯이, 사용자가 소프트웨어에 액세스 할 때 분리 할 수 ​​있고 사용자가 포함하는 비밀 키를 찾을 수 있기 때문에이 작업을 수행하는 정말 안전한 방법이 존재하지 않습니다. 그 제약 조건을 감안할 때, 나는 DLL을 사용하는 것에 대한 생각은 당신이 할 수있는만큼 좋다.

+0

OTOH, 데이터를 변경하지 않는 것은 궁극적으로 고객의 책임입니다. 변경을 방지하는 것은 당사의 책임입니다. 사장님/고객이 사인 한 데이터에 서명하기 위해 사용자 별 개인 키를 갖고 싶어할지 모르겠지만, 적어도 할 수있는 방법은 12 가지가 있습니다. –

+0

데이터가 위조되지 않았 음을 보장하는 소프트웨어의 능력에 대해 귀사가 주장하는 것은 어리석은 일입니다. .dll에서조차 개인 키 또는 암호를 추출하는 것은 그렇게 어렵지 않습니다. 디버거가있는 동기 부여가 충분하고 시간이 충분하면 누구나 할 수 있습니다. – Christopher

+0

또한 비밀번호가 임의의 데이터처럼 보이는지는 중요하지 않습니다. 사실 그것은 문제가 될 수 있습니다. .exe 및 .dll 파일은 * 임의 * 아닙니다. 의심스러운 무작위 데이터 파일을 분석한다면 키를 곧바로 발견 할 수 있습니다. – Christopher

3

어딘가에 암호를 내장하면 이미 물에 젖어 있습니다. 아무 것도 보장 할 수 없습니다.

그러나 공개 키/개인 키 암호화를 사용하여 데이터가 변조되지 않았는지 확인할 수 있습니다.

  1. 당신은 공개 키/개인 키 쌍을 생성 :

    작동 방법은 이것이다.

  2. 개인 키를 안전하게 유지하고 공용 키를 배포하십시오.
  3. 해시 한 다음 개인 키로 해시에 서명하십시오.
  4. 공개 키를 사용하여 해시를 확인하십시오.

이것은 회사 외부에서 읽기 전용으로 데이터를 효과적으로 렌더링하고 암호를 배포하지 않고 데이터가 수정되지 않았 음을 확인하는 간단한 방법을 프로그램에 제공합니다.

+0

해시 값에 서명하기 위해 개인 키가 필요하며 배포되지 않았다고합니다. –

+0

아니면 적어도 나는 당신의 조리법을 다음과 같이 읽었습니다 : 개인 키가 저장되어있는 서버에 해시 값을 보내라는 제안이 나오면 배포 문제를 해결할 수 있습니다. 그러나 모든 사람이 서버에 문제를 제기하도록 요청할 수 있기 때문에 서명은 그다지 중요하지 않습니다. –

+1

예,하지만 "키 숨기기"는 의미 상 다르지 않습니다. 데이터에 대해 강력하게 주장 할 수있는 유일한 방법은 사용자가 해당 사용자에게 특별히 할당 된 키를 사용하여 데이터 해시에 서명하도록하는 것입니다. 해시 및 서명은 보안 영역에 저장됩니다. 나중에 데이터에 대한의 L가있는 경우, 보안 저장소에 저장된 서명을 제공된 데이터와 비교하여 점검 할 수 있습니다. 예, 연구자는 원하는 데이터에 대한 서명을 요청할 수 있습니다. 하지만 그것은 현재 시스템이 작동하는 방식과 다르지 않습니다. 모호한 보안은 전혀 보안이 아닙니다. – Christopher

0

다른 문제가 있습니다. 아마도 데이터 수집 소프트웨어는 일부 외부 소스 (일종의 측정 장치와 같은)에서 데이터를 수집 한 다음 원시 데이터에 필요한 모든 프로세스를 수행하고 결과를 저장하는 것입니다. 프로그램에서 사용하는 방법에 관계없이 다른 가능한 공격 경로는 프로그램에 잘못된 데이터를 제공하는 것이며 프로그램 자체는 측정에서 나온 데이터가 아니라 작성된 데이터를 제공하고 있음을 알 수있는 방법이 없습니다 장치. 그러나 이것은 고칠 수 없다.

또 다른 공격 경로가 될 수 있습니다. (아마도 컴퓨터에 저장된 데이터가 손상된 것일 수 있습니다.) 위험을 완화하기위한 아이디어는 다음과 같습니다. 별도의 서버를 설정하십시오. 귀하의 회사가 실행되거나, 클라이언트가 설정하는 것이 될 가능성이 더 높음) 암호로 보호 된 웹 서비스를 사용하여 사용자가 데이터 레코드를 추가 할 수는 있지만 제거 할 수는 없습니다. 그런 다음 프로그램을 가지고 데이터를 수집하고 보내십시오 (프로그램에 저장된 암호/연결 문자열을 사용하여) 서버에 데이터가 성공적으로 저장되었다는 확인을 받으면 프로그램이 로컬 컴퓨터에 데이터를 쓰게하십시오.

공격자가 클라이언트의 데이터. 프로그램을 리버스 엔지니어링 할 수 있다면 프로그램과 마찬가지로 저장소로 서버에 보낼 수 있습니다. 그러나 서버는 여전히 원본 데이터를 가지므로 서버가 원본 데이터와 수정 된 데이터로 끝나기 때문에 변조가 감지 될 수 있습니다. 클라이언트는 원래 레코드를 지울 수 없습니다. 물론 클라이언트 프로그램은 서버의 레코드를 지우는 방법을 알 필요가 없습니다.

관련 문제