Änderungsnachweis-Bericht
Gemergte Änderungen
Northwind (Beispieldaten) · 2 Repositories · Standard-Branch · 15. Juli bis 13. Okt. 2026
- Erstellt für
- [Prüfungsgesellschaft]
- Repositories
- northwind/payments-api · northwind/ledger-service
- Änderungen im Umfang
- 146 in den Standard-Branch gemergte Pull Requests, jeder mit einem versiegelten Änderungseintrag, 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.
1Zusammenfassung
Prozessnachweis · wie Änderungen hineinkamen
Code-Nachweis · was die Änderungen bewirken
Was erfasst wurde
Toevan hat die Merges in den Standard-Branch, 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
2Umfang, 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 den Deployment- und Release-Einträgen von GitHub übernommen und per Commit oder Digest verknüpft.
- Den Originaleintrag in GitHub 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 | SOC 2 CC8.1 · ISO 27001 A.8.32 · DORA RTS 2024/1774 Art. 17 (geplant) | |
| Pflicht-Checks beim Merge; geltende Review-Regeln; Regeländerungen und Umgehungen | SOC 2 CC8.1 · ISO 27001 A.8.32 · DORA RTS 2024/1774 Art. 17 (geplant) | |
| 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 · SOC 2 CC8.1 | |
| Änderungs-Grundgesamtheit und Vollständigkeit | SOC 2 CC8.1 · ISO 27001 A.8.32 | |
| Deployment eines Commits in Produktion | SOC 2 CC8.1 · ISO 27001 A.8.32 | |
| 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 und Artefakte außerhalb von GitHub und ob ein deploytes Artefakt noch läuftOrganisatorisch
- Merges in andere Branches als den Standard-BranchNicht in dieser Version
- Änderungen außerhalb von GitHub, etwa direkt in Datenbank oder KonsoleOrganisatorisch
3Prozessnachweis
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
Grundgesamtheit der Änderungen
Jeder Commit, der im Zeitraum den Standard-Branch erreicht hat, aus der Git-Historie aufgelistet und einem Eintrag zugeordnet.
Deployments per Commit verknüpft
Welcher Commit wann in Produktion gelangte. Toevan liest das aus GitHub; es erzeugt es nicht. Wo GitHub keinen Deployment-Eintrag hält, wird die Verknüpfung als nicht erfasst gemeldet und nie aus dem Zeitverlauf abgeleitet.
4Code-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-network-segmentation | Keine öffentliche Erreichbarkeit interner Dienste | Bestanden | 0 |
| iac-encryption-policy | Schalter für Speicherverschlüsselung im Infrastruktur-Code aktiviert | 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
5Ausnahmegenehmigungen 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
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 Produktion
- Freigegeben
- Release v2.31.0 · 13. Okt. 2026, 11:05 UTC
- Gemeldet + versiegelt
- Deployt
- Produktion · 13. Okt. 2026, 11:20 UTC · Build-Digest sha256:7d3e…a1c4 · rec_9e41b07
- Übernommen
- In Release kopiert
- Nicht erfasst: Die Backport-Verknüpfung (L5) ist in diesem Release nicht eingebaut
- Nicht erfasst
Siegel
- Signatur
- ECDSA P-256 · DSSE-Envelope · keyid 8c1f…e0a2
- Vorheriger Eintrag
- rec_b7e21f0
- Öffentlicher Anker
- Optionale Rekor-Verankerung · für diese Organisation aus
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 |
7So prüfen Sie diesen Bericht
Jeder Weg lässt Sie die Nachweise selbst prüfen. 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 und openssl. Für die ganze Kette nutzen Sie den Befehl toevan, den Toevan auf Anfrage bereitstellt und der noch nicht öffentlich ist. 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.
8Geplante ErgänzungenGeplant
Spätere Ebenen der Nachweiskette. Sie sind geplant, und nichts in diesem Bericht hängt von ihnen ab. Jede nennt, wie ihre Fakten erhoben werden.
Festgelegte Produktions-Branches
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.
Einen Eintrag mit openssl und der Shell prüfen, ohne Toevan-Software
ENV=attestations/<head_sha>/<record_id>.dsse.json
REC=records/<head_sha>/<record_id>.json
PUB=toevan.pub
openssl pkey -pubin -in "$PUB" -outform DER | openssl dgst -sha256
T=$(sed -E 's/.*"payloadType":"([^"]*)".*/\1/' "$ENV")
sed -E 's/.*"payload":"([^"]*)".*/\1/' "$ENV" | openssl base64 -d -A > statement.json
sed -E 's/.*"sig":"([^"]*)".*/\1/' "$ENV" | openssl base64 -d -A > sig.der
{ printf 'DSSEv1 %s %s %s ' "${#T}" "$T" "$(wc -c < statement.json | tr -d ' ')"; cat statement.json; } > pae.bin
openssl dgst -sha256 -verify "$PUB" -signature sig.der pae.bin
H=$(sed -E 's/.*"record_hash":"sha256:([0-9a-f]{64})".*/\1/' statement.json)
if [ "$(openssl dgst -sha256 -r "$REC" | cut -d' ' -f1)" = "$H" ]; then echo "record matches the statement"; else echo "RECORD DOES NOT MATCH THE STATEMENT"; fi
printf 'record %s\n' "$(sed -nE 's/.*"record_id":"([^"]*)".*/\1/p' statement.json)"
printf 'subject %s\n' "$(sed -nE 's/.*"subject":\[\{"digest":\{"([^"]*)":"([^"]*)"\},"name":"([^"]*)"\}\].*/\3 \1:\2/p' statement.json)"
SHA2-256(stdin)= <key id>
Verified OK
record matches the statement
record <the record id you picked>
subject git+https://github.com/<owner>/<repository> gitCommit:<the commit you picked>Der Envelope ist eine Zeile JSON, wie Toevan ihn schreibt; die drei Pfade sind die auf dem Evidence-Branch. Die erste Zeile nach den Pfaden gibt die Schlüssel-ID aus, die Sie mit der veröffentlichten Liste vergleichen. Erwarten Sie „Verified OK“ und „record matches the statement“ bei jedem Eintrag, den Sie prüfen. Die letzten beiden Zeilen müssen den Eintrag und den Commit nennen, den Sie gewählt haben. Jeder Fehlschlag heißt, der Eintrag wurde verändert oder nicht mit dem veröffentlichten Schlüssel signiert.
Die ganze Kette mit dem Toevan-Verifier nachspielen (auf Anfrage, noch nicht öffentlich)
$ toevan audit verify --path evidence-clone --pub-key toevan.pub
✓ chain intact · 4,152 records
✓ signatures verify under the published keyDieser Befehl braucht den Toevan-Verifier, den Toevan auf Anfrage bereitstellt. Er gehört nicht zum openssl-Weg oben.