Änderungsnachweis-Bericht
Gemergte Änderungen
Northwind (Beispieldaten) · 2 Repositories · geschützte Branches · 15. Juli bis 13. Okt. 2026
- Erstellt für
- [Prüfungsgesellschaft]
- Repositories
- northwind/payments-api · northwind/ledger-service
- Änderungen im Umfang
- 146 in geschützte Branches gemergte Pull Requests und 2 direkte Pushes, beim Eintreten aus GitHub erfasst.
- Einträge
- 4.152 versiegelte Einträge: Änderungseinträge, Control-Änderungen und Code-Prüfungen. Signaturen bei der Erzeugung geprüft.
- Engine und Regelsätze
- toevan-engine 0.9.4 · Clean Architecture 1.4.0 · Security Essentials 2.14.0
- Personen
- In versiegelten Einträgen als Digests ihrer GitHub-Konten dargestellt. Ausnahmegenehmigungen nennen Antragsteller und Genehmiger.
- Erzeugt
- 13. Okt. 2026, 11:42 UTC von [Name]
- Bericht-Hash
- sha256:3f9a…c21e
Dieser Bericht ist ein Nachweis, den der Auditor beurteilt. Toevan äußert keine Meinung dazu, ob Controls angemessen gestaltet sind oder wirksam arbeiten. Jeder Fakt nennt, wie er erhoben wurde. Controls außerhalb der Abdeckung von Toevan stehen im Abschnitt zum Umfang und bleiben in der Verantwortung der Organisation.
1. Zusammenfassung
Prozessnachweis · wie Änderungen hineinkamen
Code-Nachweis · was die Änderungen bewirken
Was erfasst wurde
Toevan hat die Merges in geschützte Branches, die Änderungen an Review-Regeln, die Umgehungen und die direkten Pushes in beiden Repositories so erfasst, wie GitHub sie gemeldet hat, und jeden beim Eintreten versiegelt. Im Zeitraum wurden 146 pull requests gemergt und 2 Commits direkt gepusht. Gemeldet + versiegelt
Punkte zur Beachtung
- Zwei direkte Pushes auf payments-api/release/v1 am 19. Sep., innerhalb eines Fensters von 29 Minuten, in dem die Review-Pflicht ausgeschaltet war.Prozess
- Drei Pull Requests wurden ohne Freigabe durch eine andere Person als den Autor gemergt: zwei in ledger-service, bevor dessen Review-Regel existierte, einer per Admin-Umgehung im Fenster vom 19. Sep.Prozess
- Die Regel secret-detection-high schlägt im Produktionscode fehl (1 Befund), gedeckt durch eine genehmigte Ausnahmegenehmigung bis 20. Dez.Code, Ausnahmegenehmigungen
2. Umfang, Herkunft und Control-Zuordnung
Wie jeder Fakt erhoben wurde
- Neu berechnet
- Toevan hat es selbst aus Code oder Git-Historie berechnet.
- Mit denselben Eingaben nachvollziehen und dasselbe Ergebnis erhalten.
- Gemeldet + versiegelt
- GitHub hat es gemeldet; Toevan hat es beim Ereignis erfasst und signiert.
- Verlassen Sie sich darauf, soweit Sie GitHub vertrauen. Jede spätere Änderung ist erkennbar.
- Erklärt + versiegelt
- Die Organisation hat es erklärt, etwa eine Änderung dessen, was geprüft wird; Toevan hat die Erklärung und ihre Historie signiert.
- Sehen Sie, wer was wann erklärt hat, und jede spätere Änderung.
- Toevan-Eintrag, nicht versiegelt
- In der Datenbank von Toevan gespeichert, aber nicht im Ledger versiegelt, etwa eine Ausnahmegenehmigung heute. Keine Signatur schützt ihn.
- Behandeln Sie ihn als Aussage von Toevan und fragen Sie die Organisation nach der Freigabe dahinter.
- Übernommen
- Aus dem signierten Eintrag eines anderen Systems übernommen, etwa einer Build-Provenienz, und per Commit oder Digest verknüpft. Geplant.
- Den Originaleintrag unabhängig prüfen.
- Nicht erfasst
- Es gab keine verlässliche Quelle. Toevan schließt nichts daraus.
- Auf anderem Weg bei der Organisation einholen.
Nachweise und die Controls, auf die sie sich beziehen
| Nachweis | Relevante Controls | Erhoben |
|---|---|---|
| Freigabe, unabhängiges Review, Freigabe auf dem finalen Commit | DORA RTS 2024/1774 Art. 17 (geplant) · SOC 2 CC8.1 · ISO 27001 A.8.32 | |
| Pflicht-Checks beim Merge; geltende Review-Regeln; Regeländerungen und Umgehungen | DORA RTS 2024/1774 Art. 17 (geplant) · SOC 2 CC8.1 · ISO 27001 A.8.32 | |
| Direkte Pushes auf geschützte Branches | SOC 2 CC8.1 · ISO 27001 A.8.4, A.8.32 | |
| Code-Regeln: Architekturgrenzen, sicheres Coding, Abhängigkeiten | ISO 27001 A.8.25, A.8.28 · SOC 2 CC8.1 | |
| Ausnahmegenehmigungen und Umfangsänderungen | Ausnahmen zu den obigen Regeln |
Von diesem Bericht nicht abgedeckt
- Zugriffsprüfungen, Eintritts- und AustrittsprozesseOrganisatorisch
- Laufzeitüberwachung, Incident ResponseOrganisatorisch
- IKT-Drittparteirisiko, physische SicherheitOrganisatorisch
- Deployments außerhalb von GitHubOrganisatorisch
- Änderungen außerhalb von GitHub, etwa direkt in Datenbank oder KonsoleOrganisatorisch
3. Prozessnachweis
Wie die 146 im Zeitraum gemergten Pull Requests geprüft und gemergt wurden, im Moment jedes Merges aus GitHub erfasst.
| Prüfung | Ergebnis | Erhoben |
|---|---|---|
| Freigegeben von einer anderen Person als dem Autor | 143 / 146 · 3 Abweichungen | |
| Freigabe auf dem finalen Commit erteilt | 137 / 143 freigegeben · 6 gaben einen früheren Commit frei | |
| Pflicht-Checks beim Merge bestanden | 146 / 146 | |
| Commit-Signaturen von GitHub geprüft | 144 / 146 | |
| Geltende Review-Regeln beim Merge erfasst | 146 / 146 |
Abweichungen: ohne unabhängige Freigabe gemergt
| PR | Gemergt | Autor | Beim Merge geltende Regel | Eintrag |
|---|---|---|---|---|
| ledger-service #388 | 24. Juli | 4be1…09c2 | Keine (Regel am 02. Aug. ergänzt) | rec_51b9e20 |
| ledger-service #391 | 29. Juli | c58f…71d0 | Keine (Regel am 02. Aug. ergänzt) | rec_6e07a3d |
| payments-api #1903 | 19. Sep. 14:12 | 2a6e…f915 | Ausgeschaltet 14:02 bis 14:31 (Admin) | rec_0c88f14 |
Änderungen an den Controls selbst
| Wann (UTC) | Änderung | Durch | Eintrag |
|---|---|---|---|
| 02. Aug. 09:14 | Review-Regel auf ledger-service angewendet: 2 Freigaben, Pflicht-Checks | 9d07…e3a4 | rec_8a2f61c |
| 19. Sep. 14:02 | Review-Pflicht auf payments-api/release/* ausgeschaltet | 2a6e…f915 | rec_3f10b9a |
| 19. Sep. 14:31 | Review-Pflicht wieder eingeschaltet | 2a6e…f915 | rec_3f10c02 |
Direkte Pushes ohne Pull Request
| Wann (UTC) | Branch | Commit | Durch | Eintrag |
|---|---|---|---|---|
| 19. Sep. 14:09 | payments-api/release/v1 | 7c1e0a2 | 2a6e…f915 | rec_7c1e0a2 |
| 19. Sep. 14:22 | payments-api/release/v1 | 91d4b3f | 2a6e…f915 | rec_91d4b3f |
Control-Änderungen und direkte Pushes werden als Ereignisse erfasst, wenn sie eintreten, daher bleibt keine Lücke zwischen Momentaufnahmen unbemerkt. Personen erscheinen als Digests ihrer GitHub-Konten; die Unabhängigkeit wird aus den Konto-IDs berechnet. Gemeldet + versiegelt
4. Code-Nachweis
Was der Code bewirkt, geprüft durch Lesen des Codes selbst auf der exakten gemergten Version. Als fehlschlagend markierte Regeln gelten für Produktionscode; Dokumentation und Test-Fixtures liegen außerhalb des Umfangs (siehe Ausnahmegenehmigungen).
Clean Architecture 1.4.0 · Designregeln
| Regel | Was sie prüft | Letztes Release | Befunde |
|---|---|---|---|
| layer-dependency-handlers-to-db | Request-Handler rufen die Datenbank nie direkt auf | Bestanden | 0 |
| service-boundaries | Dienste erreichen einander nur über ihre öffentlichen Schnittstellen | Bestanden | 0 |
| role-placement-policy | Abstraktionen und ihre Implementierungen liegen in den Schichten, die die Architektur ihnen zuweist | Bestanden | 0 |
| layer-dependency-policy | Eine Abhängigkeit über Schichten hinweg ist nur erlaubt, wo die Richtlinie sie aufführt | Bestanden | 0 |
Security Essentials 2.14.0 · sicheres Coding
| Regel | Was sie prüft | Letztes Release | Befunde |
|---|---|---|---|
| secret-detection-high | Keine Zugangsdaten mit hoher Konfidenz in Quellcode oder Konfiguration hartkodiert | Fehlgeschlagen | 1 · Ausnahmegenehmigung |
| no-committed-secret-files | Keine .env, kein privater Schlüssel und kein Keystore eingecheckt | Bestanden | 0 |
| vulnerable-dependency | Keine Abhängigkeit mit bekannter hoher oder kritischer Schwachstelle (OSV.dev) | Bestanden | 0 |
| encryption-at-rest | Speicher und Datenbankverbindungen verschlüsselt | Bestanden | 0 |
| iac-encryption-policy | Schalter für Speicherverschlüsselung im Infrastruktur-Code aktiviert | Bestanden | 0 |
| iac-network-segmentation | Keine öffentliche Erreichbarkeit interner Dienste | Bestanden | 0 |
| iac-access-control | Keine Zugriffsrichtlinien mit Platzhaltern | Bestanden | 0 |
| sensitive-unsafe-log-flow | Sensible Daten erreichen keine Logging-Ziele | Bestanden | 0 |
Wie weit die Analyse reichte
| Repository | Abdeckung im letzten Release | Gate | Läufe unter dem Gate im Zeitraum |
|---|---|---|---|
| payments-api | 97,9 % | 95 % | 0 |
| ledger-service | 96,6 % | 95 % | 0 |
Die Abdeckung ist der Anteil der Produktions-Quelldateien des Repositories, die der Code-Index beim indizierten Commit geparst hat. Unter dem Gate wird ein Lauf markiert, nicht als bestanden erfasst. Engine- und Regelsatz-Versionen stehen in jedem Eintrag, sodass sich jedes Ergebnis erneut ausführen lässt. Neu berechnet
5. Ausnahmegenehmigungen und Umfangsänderungen
Jede Entscheidung, die änderte, was geprüft wurde, oder eine bekannte Abweichung akzeptierte.
| Datum | Änderung | Beantragt · genehmigt | Grund | Eintrag |
|---|---|---|---|---|
| 20. Sep. | Ausnahmegenehmigung: secret-detection-high, payments-api/config/sandbox.yaml (exakte Datei), läuft am 20. Dez. ab | c58f…71d0 · 4be1…09c2 | Sandbox-Schlüssel ohne Produktionszugriff; Rotation geplant | rec_b30e7c5 |
Im Zeitraum ist keine Ausnahmegenehmigung abgelaufen oder widerrufen worden. Antragsteller und Genehmiger sind bei jedem Eintrag verschiedene Konten. Ausnahmegenehmigungen sind Toevan-Einträge, die nicht im Ledger versiegelt sind. Toevan-Eintrag, nicht versiegelt
Im Zeitraum verwendete Regelsatz-Versionen
| Regelsatz | Version | Ab | Änderung |
|---|---|---|---|
| Clean Architecture | 1.4.0 | 15. Juli (gesamter Zeitraum) | Keine Änderung |
| Security Essentials | 2.13.0 | 15. Juli | Keine Änderung |
| Security Essentials | 2.14.0 | 12. Aug. | Regeln von Toevan aktualisiert |
6. Änderungseinträge
Eine Änderung vollständig, so wie der Auditor sie bei der Stichprobe sieht. Alle Einträge stehen im CSV-Export, und jeder signierte Envelope liegt auf dem Evidence-Branch im Repository der Organisation.
rec_5b81d4eDie Änderung
- Pull Request
- payments-api #1921 · Add tenant check to refund handler
- Gemeldet + versiegelt
- Autor · gemergt von
- 4be1…09c2 · 9d07…e3a4 · 13. Okt. 2026, 10:41 UTC in main
- Gemeldet + versiegelt
- Merge-Commit
- 5b81d4e
- Gemeldet + versiegelt
- In Produktion deployt
- 13. Okt. 2026, 11:20 UTC · Produktion (GitHub-Kennzeichnung) · rec_9e41b07
- Gemeldet + versiegelt
Prozessnachweis
- Freigaben
- 9d07…e3a4, c58f…71d0 · beide auf dem finalen Commit e81b2d0
- Gemeldet + versiegelt
- Unabhängig vom Autor
- Ja, nach GitHub-Konto-ID
- Neu berechnet
- Pflicht-Checks
- ci/test ✓ · ci/lint ✓ · toevan/gate ✓
- Gemeldet + versiegelt
- Geltende Regeln
- main-protection: 2 Freigaben, Pflicht-Checks, signierte Commits
- Gemeldet + versiegelt
- Commit-Signatur
- Von GitHub geprüft
- Gemeldet + versiegelt
Code-Nachweis
- Designregeln
- 4 / 4 bestanden
- Neu berechnet
- Sicheres Coding
- 7 / 8 bestanden · secret-detection-high unter Ausnahmegenehmigung rec_b30e7c5
- Neu berechnet
- Abdeckung · Engine
- 98,1 % (Gate 95 %) · toevan-engine 0.9.4
- Neu berechnet
Weg in die ProduktionGeplant
- In Release kopiert
- Per Inhalt dem geprüften Original zugeordnet
- Neu berechnet
Siegel
- Signatur
- ECDSA P-256 · DSSE-Envelope · keyid 8c1f…e0a2
- Vorheriger Eintrag
- rec_b7e21f0
- Öffentlicher Anker
- Öffentliches Rekor-Log von Sigstore · eingebaut, Opt-in je Organisation
Weitere Einträge (Beispiel)
| Eintrag | Änderung | Unabhängige Freigabe | Code-Regeln | Versiegelt (UTC) |
|---|---|---|---|---|
| rec_b7e21f0 | payments-api #1918 | Ja | 11 / 12 · Ausnahmegenehmigung | 13. Okt. 09:58 |
| rec_9d41e02 | ledger-service #412 | Ja | 12 / 12 | 09. Okt. 16:21 |
| rec_0c88f14 | payments-api #1903 | Nein · Admin-Umgehung | 12 / 12 | 19. Sep. 14:12 |
| rec_7c1e0a2 | direct push 7c1e0a2 | Nein · kein PR | 12 / 12 | 19. Sep. 14:09 |
7. So prüfen Sie diesen Bericht
Sie müssen weder Toevan noch der Organisation vertrauen. Wählen Sie den Weg, der zu Ihrer Rolle passt. Nur der dritte braucht Werkzeuge.
| Prüfung | Was sie belegt | Was sie nicht belegt |
|---|---|---|
| Eintrag ist echt und unverändert | Der Eintrag wurde mit Toevans veröffentlichtem Schlüssel signiert und seither nicht verändert. Die Hash-Kette zeigt, dass keiner entfernt wurde. | Dass die Fakten darin stimmen: Das decken die beiden Prüfungen unten ab. |
| Freigabe war unabhängig | Freigebender und Autor sind verschiedene GitHub-Konten, aus den Konto-IDs im Eintrag neu berechnet. | Dass das Review selbst angemessen war. |
| Code-Ergebnis ist reproduzierbar | Derselbe Commit, dieselbe Engine-Version und dieselbe Regelsatz-Version ergeben dasselbe Ergebnis. | Dass die Regeln jedes Risiko im Code abdecken. |
In der App der Organisation
Lesezugriff für Auditoren, kein Repository-Zugriff
- Die Organisation lädt Sie mit der Auditor-Rolle ein: Lesezugriff auf die Nachweisliste, die Exporte und die Berichte.
- „Jetzt prüfen“ prüft in der App das gesamte Ledger, die Signaturen und etwaige Belege des Transparenz-Logs erneut.
- Mehr öffnen Sie nicht: Repositories, Code und Befunde werden verweigert.
Der Organisation beim Prüfen zusehen
Bildschirmfreigabe oder vor Ort
- Sie wählen die Stichproben während der Sitzung; ein Engineer führt die Prüfungen aus, während Sie zusehen.
- Prüfung jedes gezogenen Eintrags: Kette, Signatur, unverändert.
- Konten von Autor und Freigebendem je Stichprobe, auf dem Bildschirm verglichen.
Selbst ausführen
IT-Audit-Spezialisten mit befristetem Lesezugriff
- Nutzen Sie git, openssl und den Befehl toevan, den Toevan auf Anfrage bereitstellt. Ein Toevan-Konto ist nicht nötig.
- Prüfen Sie, ob die Branch-Spitzen einer Kopie mit den im Bericht erfassten Spitzen übereinstimmen.
- Führen Sie die Befehle im Anhang aus und vergleichen Sie mit dem Bericht.
8. Geplante ErgänzungenGeplant
Spätere Ebenen der Nachweiskette. Sie sind nicht in v1.4.0, und nichts in diesem Bericht hängt von ihnen ab. Jede nennt, wie ihre Fakten erhoben werden.
Festgelegte Produktions-Branches (v1.4.1)
Branches, die die Organisation als Produktion festlegt, etwa ein Release-Branch, jede Festlegung erklärt und mit jeder späteren Änderung versiegelt. Jeder erhält dieselbe Grundgesamtheit wie der Standard-Branch: jeder Commit direkt aus Git aufgelistet und einem Eintrag zugeordnet oder markiert.
Kopierte Fixes per Inhalt zugeordnet
Ein auf main geprüfter und auf einen Release-Branch kopierter Fix erhält eine neue Commit-ID. Toevan ordnet ihn per Inhalt (git patch-id) dem geprüften Original zu und markiert Kopien mit geändertem Inhalt.
Anhang · Befehle für technische Prüfer
Die Befehle, die ein Engineer für Sie ausführt oder die Sie selbst ausführen.
Prüfen, ob ein Eintrag echt und unverändert ist
$ openssl dgst -sha256 -verify toevan.pub \
-signature sig.der \
pae.bin
Verified OK
$ toevan audit verify --path evidence-clone --pub-key toevan.pub
✓ chain intact · 4,152 records
✓ signatures verify under the published keyDie beiden Dateien entstehen aus dem DSSE-Envelope des Eintrags mit den sed- und printf-Zeilen auf dem Evidence-Branch: die Signatur und genau die Bytes, die signiert wurden. Erwarten Sie „Verified OK“ bei jedem Eintrag, den Sie prüfen. Jeder Fehlschlag heißt, der Eintrag wurde verändert oder nicht mit dem veröffentlichten Schlüssel signiert.