Ich werde erklären, was ich vorhabe. Ich habe eine Funktion oder eine Reihe von Codezeilen (in C) zum Schutz - im Grunde sollte niemand die Anweisungen ändern. Also habe ich einen Code (Prüfsummenschutz genannt), der auf dem x86-Assembler-Code arbeitet, der aus der C-Datei erzeugt wird. Es nimmt eine Anweisung von dieser Assembly auf, addiert (oder wendet fletcher algo oder irgendeine andere Funktion an) auf einen Prüfsummenwert (anfänglich 0) an und dies wird durchgeführt, bis alle Anweisungen beendet sind. Um festzustellen, ob eine Anweisung manipuliert wurde, nehme ich den Zusatz (oder den Fletcher usw.) aller Anweisungen und überprüfe ihn mit dem vorberechneten Prüfsummenwert. Welche Methoden sind dafür geeignet?Was ist der entsprechende Prüfsummenalgorithmus, der verwendet wird, um eine Änderung des Codes zu verhindern?
Hier ist die Forschungsarbeit, die über diese Technik spricht:
https://www.cerias.purdue.edu/assets/pdf/bibtex_archive/2001-49.pdf
Hier ist die Wache Vorlage:
guard:
add ebp, -checksum
mov eax, client_addr
for:
cmp eax, client_end
jg end
mov ebx, dword[eax]
add ebp, ebx
add eax, 4
jmp for
end:
Fletcher's Checksum ist ** nicht ** eine Sicherheits-Checksumme (Sie haben "Sicherheit" als eines Ihrer Tags). Es bietet ein wenig Schutz vor zufälligen Fehlern, aber keinen Schutz vor böswilligen Angriffen, da jeder Angreifer Ihre Daten modifizieren und die entsprechende Prüfsumme für seine Änderung berechnen kann. Wenn Sie eine Sicherheitsprüfsumme wünschen, sind Nachrichtenauthentifizierungscodes (MACs) oder digitale Signaturen erforderlich. Um Ihre Frage zu beantworten, denke ich aus einer mathematischen Perspektive, 256 ist eine bessere Wahl als 255. – TheGreatContini
Ich habe die Frage geändert und daher hat sich die Beschreibung geändert. Ich habe über Message-Authentifizierung gelesen und es wird erwähnt, dass MACs, digitale Signaturen und authentische Verschlüsselung die Wege sind, um zu gehen. Was wäre die beste Methode? – ak0817