SHA-256 en MD5 bij SEPA-bestanden: welke hash gebruik je in 2026?
2026-07-09
Het bestand dat je naar je bank stuurt, staat voor geld, afspraken en verplichtingen. Wordt het tussen aanmaken en uitvoeren gewijzigd, dan zijn de gevolgen groot: een ander IBAN, een ander bedrag, en het geld is weg. Daarom zijn hashfuncties belangrijk.
Een hash is een digitale vingerafdruk van een bestand. SHA-256 en MD5 zijn twee bekende hashfuncties. Beide maken een controlegetal waarmee je kunt aantonen dat een bestand niet is veranderd. Maar ze zijn niet gelijkwaardig: MD5 is gebroken, SHA-256 is de standaard. Voor betaalbestanden is dat verschil cruciaal.
Wat is een hash en waarom telt die?
Een hashfunctie zet gegevens van elke omvang om in een vaste, unieke tekenreeks. Andere gegevens leveren een andere hash op; dezelfde gegevens altijd dezelfde.
- Hash(“IBAN: NL91ABNA0417164300”) = “a7d4f2b8c1e9…”
- Verander één teken: Hash(“IBAN: NL91ABNA0417164301”) = “2k9m4r5c7v2…”
Bij SEPA-bestanden bewijst een hash de integriteit:
- Je maakt het SEPA XML-bestand.
- Je berekent de hash.
- Je verstuurt het bestand.
- De ontvanger berekent zelf de hash.
- Komen ze overeen, dan is het bestand onderweg niet gewijzigd.
Waarom MD5 gebroken is
MD5 is al jaren cryptografisch gebroken. Dat is geen theorie.
Het collisieprobleem
Een collisie betekent dat twee verschillende invoeren dezelfde hash opleveren. Bij MD5 zijn collisies niet alleen mogelijk, ze zijn openlijk gedemonstreerd. In 2008 maakten onderzoekers twee verschillende bestanden met dezelfde MD5-hash. In theorie kan een aanvaller dus:
- een geldig SEPA-bestand maken (bestand A);
- een kwaadaardig bestand met andere betaalgegevens maken (bestand B);
- B zo aanpassen dat MD5(A) = MD5(B);
- B insturen met de hash van A.
Een controle op MD5 ziet de verwisseling niet.
Waarom dat voor finance telt
SEPA-bestanden bevatten betaalopdrachten. Wie bedragen of rekeningen tussen aanmaken en uitvoeren aanpast, richt echte financiële schade aan. MD5 geldt daarom niet meer als acceptabel voor toepassingen waar veiligheid telt.
Vuistregel: Gebruik voor betaalbestanden nooit MD5. Kies altijd SHA-256 of sterker.
SHA-256: modern en veilig
SHA-256 hoort bij de SHA-2-familie, ontworpen nadat de zwakke plekken van MD5 bekend werden. Een SHA-256-hash is 256 bits (64 tekens), tegenover 128 bits (32 tekens) bij MD5. Dat grotere bereik maakt collisies praktisch onmogelijk:
- Een MD5-collisie vinden: ongeveer 2^21 bewerkingen, haalbaar op een gewone computer.
- Een SHA-256-collisie vinden: ongeveer 2^128 bewerkingen, onhaalbaar met huidige rekenkracht.
Het verschil is niet “groter”, maar “mogelijk” tegenover “rekenkundig onhaalbaar”.
| Kenmerk | MD5 | SHA-256 |
|---|---|---|
| Lengte hash | 128 bits (32 tekens) | 256 bits (64 tekens) |
| Bestand tegen collisies | Nee, gebroken | Ja |
| Status bij NIST | Afgeraden | Actueel |
| Geschikt voor finance | Nee | Standaard |
| Snelheid | Iets sneller | Iets trager |
| Veiligheidsmarge | Geen | Ruim |
Een SHA-256-hash berekenen voor je SEPA-bestand
Windows: ~~~ certutil -hashfile betaling.xml SHA256 ~~~
macOS: ~~~ shasum -a 256 betaling.xml ~~~
Linux: ~~~ sha256sum betaling.xml ~~~
Je krijgt een tekenreeks van 64 tekens terug, zoals a3d5f8e2c1b9....
In een geautomatiseerd systeem, bijvoorbeeld in Python:
import hashlib
with open('betaling.xml', 'rb') as f:
sha256_hash = hashlib.sha256(f.read()).hexdigest()
print(f"SHA-256: {sha256_hash}")
Een praktische werkwijze
- Maak het SEPA XML-bestand, bijvoorbeeld met GenerateSEPA.
- Bereken de SHA-256-hash direct na de export.
- Leg de hash vast bij het bestand, in je archief of goedkeuringsregistratie.
- Verstuur het bestand via een beveiligd kanaal (HTTPS/TLS), zoals je internetbankieren.
- Bereken de hash opnieuw vlak voor het uploaden of bij ontvangst.
- Vergelijk de hashes. Kloppen ze, dan is de integriteit aangetoond.
Zo zie je ook of iemand het bestand ná goedkeuring nog heeft aangepast, bijvoorbeeld tussen de fiattering en de upload.
Veelgemaakte fouten met hashes
| Fout | Waarom het misgaat | Wat je doet |
|---|---|---|
| MD5 gebruiken | Sneller en korter, maar onveilig | Altijd SHA-256 |
| Hash niet vergelijken | Een hash die niemand controleert, beschermt niets | Vergelijken als vaste stap in je procedure |
| Hash en bestand via hetzelfde kanaal | Wordt het kanaal gecompromitteerd, dan kunnen beide worden aangepast | Hash apart en beveiligd vastleggen |
| Afwijkingen negeren | Een verschil is bewijs van wijziging of een overdrachtsfout | Niet doorgaan, direct escaleren |
Goede gewoontes voor de integriteit van betaalbestanden
- Gebruik altijd SHA-256 in nieuwe processen, nooit MD5 voor financiële gegevens.
- Bereken direct na de export, vóór elke overdracht.
- Documenteer de hash bij de metadata van het bestand.
- Gebruik HTTPS/TLS voor elke overdracht.
- Controleer de hash op de bestemming als vaste stap.
- Bewaar hashrecords voor je audittrail.
- Stop bij een afwijking: niet uploaden als de hashes verschillen.
Vooruitkijken: post-quantumcryptografie
Quantumcomputers kunnen op termijn ook huidige algoritmen onder druk zetten. Niet morgen, maar de sector bereidt zich voor met standaarden als SHA-3 en post-quantumalgoritmen. Voorlopig is SHA-256 de juiste keuze: veilig, breed geaccepteerd en dat blijft het nog jaren.
Kort samengevat: een hash bewijst dat je bestand niet is aangepast, MD5 is gebroken, SHA-256 is de standaard, en een hash heeft alleen zin als je hem aan beide kanten controleert. Maak je SEPA-bestanden met GenerateSEPA en leg direct na het downloaden de SHA-256-hash vast; probeer het 7 dagen gratis.
Veelgestelde vragen
- Wat is een hash en wat doet die bij SEPA-bestanden?
- Een hash is een wiskundige functie die een bestand omzet in een unieke digitale vingerafdruk van vaste lengte. Bij SEPA bewijst de hash dat het XML-bestand dat aankomt precies hetzelfde is als wat je verstuurde. Verander je één teken, dan krijg je een totaal andere hash.
- Wat is het verschil tussen MD5 en SHA-256?
- Beide maken een hash, maar met een heel ander veiligheidsniveau. MD5 is cryptografisch gebroken: twee verschillende bestanden kunnen dezelfde hash krijgen. Bij SHA-256 is dat praktisch onmogelijk. Voor financiële processen is MD5 onacceptabel en SHA-256 de juiste keuze.
- Waarom zou je MD5 niet gebruiken voor betaalbestanden?
- Omdat er bekende collisies bestaan. In theorie kan iemand twee verschillende betaalbestanden maken, waarvan één met gemanipuleerde rekeninggegevens, met dezelfde MD5-hash. Een controle op MD5 merkt die verwisseling dan niet op.
- Hoe bereken je een SHA-256-hash van een SEPA-bestand?
- Op Windows met certutil -hashfile BESTAND.xml SHA256, op macOS met shasum -a 256 BESTAND.xml en op Linux met sha256sum BESTAND.xml. Bereken de hash direct na de laatste export en vergelijk hem later op de bestemming.