Ich möchte PDF Dokumente mit Zertifikaten signieren und dabei sicherstellen das das signierende Programm nicht manipuliert wurde. Außerdem soll für jede möglicherweise existierende Kopie des Programmes genau ein, zum Programm passendes Zertifikat existieren, das einerseits zum Signieren der PDF Dateien eingesetzt werden kann (aber nicht muss), andererseits möglicherweise als Lizenzschlüssel zum Progamm dient.
Einen Ansatz dafür habe ich bereits, nun bin ich auf der Suche nach Schwachstellen und wollte mir dabe ein paar Tips holen.
1. Natürlich werde ich das Programm selbst signieren. Gibt es eine Windows-
API Funktion (oder einen anderen Standardmechanismus) mit dessen Hilfe ich zur Laufzeit prüfen kann ob die Code-Signatur gebrochen ist.
2. Jedem Programm soll ein X509-Zertifikat mitgegeben werden. Dieses Zertifikat ist einerseits Lizenzschlüssel (nicht wechselbar), andererseits das - auswechselbare - Zertifikat mit dem die PDF Dateien signiert werden - wobei keine Dateien signiert werden wenn das Original-Zertifikat nicht vorliegt. Die größte Angriffsfläche vermute ich, ist der Moment in dem ich das externe Zertifikat einlese mit den internen Daten vergleiche. Wahrscheinlich werde ich Themida einsetzen um diesen Teil zu versclüsseln, aber kennt jemand noch alternative bzw. zusätzliche Möglichkeiten?
3. Eine Möglichkeit wäre noch das Zertifikat in die Exe Datei aufzunehmen und erst zur Laufzeit auszupacken. Das geht mit Delphi-Bordmitteln oder beispielsweise ebenfalls mit Themida - allerdings ist ein deratiges Verhalten für eine Exe Datei sehr verdächtig und wird den einen oder anderen Virenwächter zum Meckern animieren. Hat jemand Erfahrungen ob diese Vorgehensweise dennoch empfehlenswert oder verdammenswert ist und ob der Aufwand im Verhältnis zum (vermeintlich) höheren Schutz steht.
4. Gibts weitere Ideen
Danke
Hans-Jörg