[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"post-de-hash-chains-mehr-als-buzzword":176},{"header":4,"footer":70},{"id":5,"primary_cta_url":6,"secondary_cta_url":7,"translations":8},"3b566e8c-2703-4d31-938d-3f5c1e999dee","\u002Fde\u002Fkontakt","https:\u002F\u002Fhr.lumen-cloud.de",[9,42],{"id":10,"languages_code":11,"nav_items":12,"primary_cta_label":40,"secondary_cta_label":41},1,"de",[13,29,33,37],{"label":14,"url":15,"children":16},"Produkte","#",[17,20,23,26],{"label":18,"url":19},"lumen.hr","\u002Fde\u002Fhr",{"label":21,"url":22},"lumen.pmo","\u002Fde\u002Fpmo",{"label":24,"url":25},"lumen.crm","\u002Fde\u002Fcrm",{"label":27,"url":28},"lumen.privacy","\u002Fde\u002Fprivacy",{"label":30,"url":31,"children":32},"Über uns","\u002Fde\u002Fueber-uns",[],{"label":34,"url":35,"children":36},"Blog","\u002Fde\u002Fblog",[],{"label":38,"url":6,"children":39},"Kontakt",[],"Demo buchen","Anmelden",{"id":43,"languages_code":44,"nav_items":45,"primary_cta_label":68,"secondary_cta_label":69},2,"en",[46,57,61,64],{"label":47,"url":15,"children":48},"Products",[49,51,53,55],{"label":18,"url":50},"\u002Fen\u002Fhr",{"label":21,"url":52},"\u002Fen\u002Fpmo",{"label":24,"url":54},"\u002Fen\u002Fcrm",{"label":27,"url":56},"\u002Fen\u002Fprivacy",{"label":58,"url":59,"children":60},"About","\u002Fen\u002Fueber-uns",[],{"label":34,"url":62,"children":63},"\u002Fen\u002Fblog",[],{"label":65,"url":66,"children":67},"Contact","\u002Fen\u002Fkontakt",[],"Book a demo","Sign in",{"id":71,"social_linkedin_url":72,"social_github_url":73,"translations":74},"115eaae3-09f7-4710-8711-7857dc894388","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Flumen-cloud","https:\u002F\u002Fgithub.com\u002Flumen-cloud",[75,128],{"id":10,"languages_code":11,"columns":76,"newsletter_headline":124,"newsletter_body":125,"newsletter_input_label":126,"newsletter_submit_label":41,"copyright":127},[77,83,103,109],{"title":14,"links":78},[79,80,81,82],{"label":18,"url":19},{"label":21,"url":22},{"label":24,"url":25},{"label":27,"url":28},{"title":18,"links":84},[85,88,91,94,97,100],{"label":86,"url":87},"Zeiterfassung","\u002Fde\u002Fhr\u002Fzeiterfassung",{"label":89,"url":90},"Abwesenheiten","\u002Fde\u002Fhr\u002Fabwesenheiten",{"label":92,"url":93},"Schichtplanung","\u002Fde\u002Fhr\u002Fschichtplanung",{"label":95,"url":96},"Entgelt & DATEV","\u002Fde\u002Fhr\u002Fentgelt-datev",{"label":98,"url":99},"Audit & Compliance","\u002Fde\u002Fhr\u002Faudit-compliance",{"label":101,"url":102},"Preise","\u002Fde\u002Fhr\u002Fpreise",{"title":104,"links":105},"Unternehmen",[106,107,108],{"label":30,"url":31},{"label":34,"url":35},{"label":38,"url":6},{"title":110,"links":111},"Rechtliches",[112,115,118,121],{"label":113,"url":114},"Impressum","\u002Fde\u002Frechtliches\u002Fimpressum",{"label":116,"url":117},"Datenschutz","\u002Fde\u002Frechtliches\u002Fdatenschutz",{"label":119,"url":120},"AGB","\u002Fde\u002Frechtliches\u002Fagb",{"label":122,"url":123},"Auftragsverarbeitung","\u002Fde\u002Frechtliches\u002Fauftragsverarbeitung","Updates aus der Lumen-Entwicklung","Quartalsweise: Produkt-Releases, Compliance-Updates, neue Branchen-Lösungen. Keine Marketing-Floskeln.","E-Mail-Adresse","© 2026 VSS Software GmbH. Alle Rechte vorbehalten.",{"id":43,"languages_code":44,"columns":129,"newsletter_headline":171,"newsletter_body":172,"newsletter_input_label":173,"newsletter_submit_label":174,"copyright":175},[130,136,156,162],{"title":47,"links":131},[132,133,134,135],{"label":18,"url":50},{"label":21,"url":52},{"label":24,"url":54},{"label":27,"url":56},{"title":18,"links":137},[138,141,144,147,150,153],{"label":139,"url":140},"Time tracking","\u002Fen\u002Fhr\u002Fzeiterfassung",{"label":142,"url":143},"Absences","\u002Fen\u002Fhr\u002Fabwesenheiten",{"label":145,"url":146},"Shift planning","\u002Fen\u002Fhr\u002Fschichtplanung",{"label":148,"url":149},"Payroll & DATEV","\u002Fen\u002Fhr\u002Fentgelt-datev",{"label":151,"url":152},"Audit & compliance","\u002Fen\u002Fhr\u002Faudit-compliance",{"label":154,"url":155},"Pricing","\u002Fen\u002Fhr\u002Fpreise",{"title":157,"links":158},"Company",[159,160,161],{"label":58,"url":59},{"label":34,"url":62},{"label":65,"url":66},{"title":163,"links":164},"Legal",[165,168],{"label":166,"url":167},"Imprint","\u002Fen\u002Frechtliches\u002Fimpressum",{"label":169,"url":170},"Privacy","\u002Fen\u002Frechtliches\u002Fdatenschutz","Updates from Lumen development","Quarterly: product releases, compliance updates, new industry solutions. No marketing fluff.","Email address","Subscribe","© 2026 VSS Software GmbH. All rights reserved.",{"id":177,"status":178,"featured_image":179,"published_at":180,"reading_time":181,"related_products":182,"no_index":184,"author":185,"translations":190,"categories":196,"content_html":209,"related_posts":210},"274ea831-7da4-49c0-a5a5-80ce1029b947","published",null,"2026-04-15T09:00:00.000Z",5,[183],"hr",false,{"id":186,"name":187,"role":188,"bio":189,"avatar":179,"linkedin_url":179},"c7c23ca0-ecbc-46ca-9321-d53e54fe25b3","Lumen Team","Product & Compliance","Das Team hinter lumen.hr — HR-Software für regulierte Betriebe. Beiträge zu Arbeitszeit, Compliance und Produkt-Entwicklung.",[191],{"id":43,"languages_code":11,"title":192,"slug":193,"excerpt":194,"content":195,"meta_title":179,"meta_description":179},"[BEISPIEL — nicht publizieren] Warum Hash-Chains mehr als Buzzword sind","hash-chains-mehr-als-buzzword","Hash-Chains sind kein Blockchain-Hype, sondern ein altes, solides Kryptografie-Pattern für Audit-Logs. Was sie leisten, was nicht, und worauf es bei der DB-Rollen-Trennung ankommt.","## Was eine Hash-Chain tatsächlich ist\n\nEine Hash-Chain ist eine Folge von Datensätzen, bei der jeder Eintrag den Hash des vorherigen Eintrags enthält. Ändert man einen Wert in der Mitte der Kette, ändert sich der Hash — und jeder nachfolgende Hash passt nicht mehr. Die Kette bricht, sichtbar.\n\nBlockchain hat dasselbe Prinzip unter einer dickeren Werbeschicht populär gemacht. Für interne Audit-Logs braucht man weder Proof-of-Work noch verteilte Konsens-Mechanismen. Was man braucht: unveränderliche Records und eine Möglichkeit, Manipulation zu erkennen.\n\n## Das Problem, das sie löst\n\nTypische Audit-Logs sind Tabellen mit einem Zeitstempel und einem Logeintrag. Wer sie ändert, kann sie ändern. Wer sie löscht, kann sie löschen. Für Compliance-Szenarien, in denen ein Auditor drei Jahre später nachweisen will, dass nichts nachträglich geändert wurde, reicht das nicht.\n\nEine Hash-Chain löst das elegant:\n\n```sql\nCREATE TABLE audit_log (\n  id          BIGSERIAL PRIMARY KEY,\n  ts          TIMESTAMPTZ NOT NULL,\n  actor_id    UUID NOT NULL,\n  action      TEXT NOT NULL,\n  payload     JSONB NOT NULL,\n  prev_hash   CHAR(64) NOT NULL,\n  hash        CHAR(64) NOT NULL\n);\n```\n\nDer `hash` eines neuen Eintrags ist `SHA256(prev_hash || ts || actor_id || action || payload)`. Der `prev_hash` des ersten Eintrags ist 64 Nullen. Danach ist jeder Eintrag an den vorherigen gekoppelt.\n\n## Warum Append-only auf DB-Ebene wichtig ist\n\nEine Hash-Chain in der Applikation zu berechnen ist wertlos, wenn irgendeine Rolle UPDATE- oder DELETE-Rechte auf der Audit-Tabelle hat. Der Schlüssel liegt in der Datenbank-Rolle:\n\n:::info Append-only auf Postgres\nRechte-Trennung: die Applikation benutzt eine Rolle mit INSERT-Rechten, aber OHNE UPDATE\u002FDELETE auf audit_log. Migrations-Skripte laufen unter einer Admin-Rolle, die geschützt ist. Wer das auslässt, baut Hash-Chain-Theater.\n:::\n\n## Was Hash-Chains NICHT sind\n\nKein Schutz vor einem Angreifer mit Root-Zugriff auf die Datenbank. Wer alle Einträge und alle Hashes neu berechnen kann, erzeugt eine konsistente, aber manipulierte Kette. Dafür gibt es externe Verankerung: regelmäßig den aktuellen Top-Hash in einem unveränderlichen Medium ablegen (z. B. per DKIM-signierte E-Mail an einen externen Empfänger, oder einen Append-only-Bucket beim Hosting-Provider).\n\nFür die meisten Compliance-Szenarien reicht aber der interne Nachweis — kombiniert mit Rollen-Trennung und einer Protokollierung, die auch DB-Admin-Zugriffe loggt.\n\n## Fazit\n\nHash-Chains sind kein Buzzword, sondern ein kleines, gut abgehangenes Kryptografie-Pattern. Wer einen Audit-Trail braucht, der vor Gericht oder vor einem FDA-Auditor Bestand hat, baut eine Hash-Chain ein, schützt die DB-Rollen sauber ab und verankert den Top-Hash extern. Das ist überschaubar, es ist kein Blockchain-Projekt — und es erfüllt den Zweck.",[197,203],{"id":198,"slug":199,"sort":10,"translations":200},"e1c09a35-4376-410d-a435-f1c049a89990","compliance",[201],{"id":10,"languages_code":11,"name":202},"Compliance",{"id":204,"slug":205,"sort":43,"translations":206},"ce7e7827-aed1-428a-93d4-02efb59afbb6","produkt",[207],{"id":43,"languages_code":11,"name":208},"Produkt","\u003Ch2>Was eine Hash-Chain tatsächlich ist\u003C\u002Fh2>\n\u003Cp>Eine Hash-Chain ist eine Folge von Datensätzen, bei der jeder Eintrag den Hash des vorherigen Eintrags enthält. Ändert man einen Wert in der Mitte der Kette, ändert sich der Hash — und jeder nachfolgende Hash passt nicht mehr. Die Kette bricht, sichtbar.\u003C\u002Fp>\n\u003Cp>Blockchain hat dasselbe Prinzip unter einer dickeren Werbeschicht populär gemacht. Für interne Audit-Logs braucht man weder Proof-of-Work noch verteilte Konsens-Mechanismen. Was man braucht: unveränderliche Records und eine Möglichkeit, Manipulation zu erkennen.\u003C\u002Fp>\n\u003Ch2>Das Problem, das sie löst\u003C\u002Fh2>\n\u003Cp>Typische Audit-Logs sind Tabellen mit einem Zeitstempel und einem Logeintrag. Wer sie ändert, kann sie ändern. Wer sie löscht, kann sie löschen. Für Compliance-Szenarien, in denen ein Auditor drei Jahre später nachweisen will, dass nichts nachträglich geändert wurde, reicht das nicht.\u003C\u002Fp>\n\u003Cp>Eine Hash-Chain löst das elegant:\u003C\u002Fp>\n\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode class=\"language-sql\">\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">CREATE\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> TABLE\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> audit_log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  id          \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">BIGSERIAL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> PRIMARY KEY\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  ts          \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">TIMESTAMPTZ\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> NOT NULL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  actor_id    UUID \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  action\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">      TEXT\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> NOT NULL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  payload     JSONB \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  prev_hash   \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">CHAR\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">NOT NULL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  hash\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">        CHAR\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">NOT NULL\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Der \u003Ccode>hash\u003C\u002Fcode> eines neuen Eintrags ist \u003Ccode>SHA256(prev_hash || ts || actor_id || action || payload)\u003C\u002Fcode>. Der \u003Ccode>prev_hash\u003C\u002Fcode> des ersten Eintrags ist 64 Nullen. Danach ist jeder Eintrag an den vorherigen gekoppelt.\u003C\u002Fp>\n\u003Ch2>Warum Append-only auf DB-Ebene wichtig ist\u003C\u002Fh2>\n\u003Cp>Eine Hash-Chain in der Applikation zu berechnen ist wertlos, wenn irgendeine Rolle UPDATE- oder DELETE-Rechte auf der Audit-Tabelle hat. Der Schlüssel liegt in der Datenbank-Rolle:\u003C\u002Fp>\n\u003Caside class=\"callout callout--info\" role=\"note\">\u003Cp class=\"callout__head\">\u003Cspan class=\"callout__icon\" aria-hidden=\"true\">ⓘ\u003C\u002Fspan>\u003Cstrong class=\"callout__title\">Append-only auf Postgres\u003C\u002Fstrong>\u003C\u002Fp>\u003Cdiv class=\"callout__body\">\u003Cp>Rechte-Trennung: die Applikation benutzt eine Rolle mit INSERT-Rechten, aber OHNE UPDATE\u002FDELETE auf audit_log. Migrations-Skripte laufen unter einer Admin-Rolle, die geschützt ist. Wer das auslässt, baut Hash-Chain-Theater.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2>Was Hash-Chains NICHT sind\u003C\u002Fh2>\n\u003Cp>Kein Schutz vor einem Angreifer mit Root-Zugriff auf die Datenbank. Wer alle Einträge und alle Hashes neu berechnen kann, erzeugt eine konsistente, aber manipulierte Kette. Dafür gibt es externe Verankerung: regelmäßig den aktuellen Top-Hash in einem unveränderlichen Medium ablegen (z. B. per DKIM-signierte E-Mail an einen externen Empfänger, oder einen Append-only-Bucket beim Hosting-Provider).\u003C\u002Fp>\n\u003Cp>Für die meisten Compliance-Szenarien reicht aber der interne Nachweis — kombiniert mit Rollen-Trennung und einer Protokollierung, die auch DB-Admin-Zugriffe loggt.\u003C\u002Fp>\n\u003Ch2>Fazit\u003C\u002Fh2>\n\u003Cp>Hash-Chains sind kein Buzzword, sondern ein kleines, gut abgehangenes Kryptografie-Pattern. Wer einen Audit-Trail braucht, der vor Gericht oder vor einem FDA-Auditor Bestand hat, baut eine Hash-Chain ein, schützt die DB-Rollen sauber ab und verankert den Top-Hash extern. Das ist überschaubar, es ist kein Blockchain-Projekt — und es erfüllt den Zweck.\u003C\u002Fp>\n",[211],{"id":212,"featured_image":179,"published_at":213,"reading_time":214,"translations":215,"categories":220},"734f9d63-5497-49dd-8fdb-406d5654d79a","2026-04-20T10:00:00.000Z",6,[216],{"languages_code":11,"title":217,"slug":218,"excerpt":219},"[BEISPIEL — nicht publizieren] ArbZG in der Praxis: Die fünf häufigsten Stolperfallen","arbzg-stolperfallen","Pausen, Ruhezeiten und die Zehn-Stunden-Grenze sind die typischen Kandidaten bei Betriebsprüfungen. Fünf konkrete Fallstricke — und wie sie sich vermeiden lassen.",[221,227],{"id":222,"slug":223,"translations":224},"204683b4-e14d-429c-89b3-3166f843f6f0","arbzg",[225],{"languages_code":11,"name":226},"ArbZG",{"id":198,"slug":199,"translations":228},[229],{"languages_code":11,"name":202}]