[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fblog\u002Fencryption-explained":167,"team-members":2010,"blog-topics":2353,"mdc--a70y1b-key":2394,"glossary":2511},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Elke app die we uitbrengen bereikt Android — platform-API's, uitvoering op de achtergrond, permissies en de winkeleisen die daarbij horen.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","Het front-endframework waarin we werken als een product al Angular is — een kant-en-klare structuur die past bij grote, langlevende applicaties.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","De taal waarin elke Flutter-app die we uitbrengen geschreven is — sound null safety, echte pattern matching, en een compiler voor native en web.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","Het Python-framework dat we pakken als een product op dag één een beheeromgeving, authenticatie en een echt datamodel nodig heeft.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Elke service die we bouwen verschijnt als container, zodat wat op een laptop, in CI en in productie draait één artefact is en niet drie verschillende.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","De releaseautomatisering achter ons mobiele werk — ondertekenen, builds en winkeluploads draaien vanuit CI, niet vanaf één laptop.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Onze belangrijkste mobiele stack sinds 2018 — één Dart-codebase die uitkomt op iOS, Android, web en desktop zonder een apart team per platform.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Elk project dat we aanraken leeft in Git — beoordeelde pull requests, CI op elke branch, en een historie die maanden later nog te volgen is.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Onze backendtaal voor realtime-API's en services onder belasting — kleine binaries, snelle builds, en gelijktijdigheid die leesbaar blijft.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","De cloud waarop onze productieworkloads draaien — beheerde Kubernetes, opslag en netwerken, zonder handgebouwde servers die niemand wil onderhouden.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","Het buildsysteem waar elke Android-release doorheen gaat — product flavours, ondertekeningsconfiguraties, en de afhankelijkheden onder een Flutter-app.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Hoe we een Kubernetes-uitrol verpakken — service, configuratie, secrets en ingress als één versiebeheerde eenheid die je kunt promoveren en terugdraaien.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","Waar we naar grijpen als een Flutter-app echt Android eronder nodig heeft — platform channels, achtergrondwerk en integraties met native SDK's.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Bedrijfslogica delen tussen iOS en Android terwijl elk platform zijn eigen native UI houdt — het alternatief wanneer Flutter niet past.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Hoe we services in productie draaien — Helm-uitrollen, rollouts die terug te draaien zijn, en schalen zonder dat iemand om 3 uur 's nachts wakker hoeft te zijn.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Lichtgewicht berichtenverkeer tussen services — publish\u002Fsubscribe en request\u002Freply zonder het beheergewicht van een volledig brokercluster.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue met serverrendering, routering en SEO al geregeld — hoe we marketingsites en webapps bouwen die bij het eerste laden snel en vindbaar moeten zijn.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Waar we met een bestaande PHP-backend werken — hem uitbreiden, ermee integreren, en de mobiele en webclients bouwen die hij moet bedienen.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Onze standaarddatabase — waar we naar grijpen tenzij een product een specifieke reden geeft om dat niet te doen, van schema tot indexen.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Onze taal voor backends, datawerk en AI-integraties — inclusief de Python-bindings die we bij onze eigen Rust-tooling leveren.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","De front-endbibliotheek waarin we werken als een product al React is — componenten, hooks, en het ecosysteem dat eromheen is gegroeid.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Waar we data neerzetten die snel moet zijn en opnieuw op te bouwen valt — caches, sessies, verzoeklimieten en achtergrondwachtrijen.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","De taal waarin onze mobiele releaseautomatisering geschreven is — Fastlane-lanes, eigen acties, en de CI-lijm die builds naar de winkels brengt.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Waar we heen gaan als prestaties én correctheid allebei tellen — documenten renderen, CLI-tooling, en services die snel en voorspelbaar moeten blijven.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","De database die meereist in de app — lokale caches, offline-first opslag, en alles wat ook zonder netwerk moet blijven werken.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Een headless CMS waar we naar grijpen als redacteuren de content moeten beheren — een echte beheeromgeving en een schone API, zonder ze zelf te bouwen.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","Waar we naar grijpen als een Flutter-app echt iOS eronder nodig heeft — platform channels, integraties met native SDK's, widgets en App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","Het UI-framework van Apple, waar we de native oppervlakken bouwen die een Flutter-app niet kan afdekken — widgets, App Clips, extensies en systeemintegraties.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Hoe we elke front-end die we bouwen vormgeven — utility-klassen en designtokens in plaats van een stylesheet die alleen maar groeit en nooit wordt opgeschoond.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","De standaard voor alles wat we voor de browser en voor Node-services schrijven — types die integratiebugs vangen voordat ze een review halen.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Ons front-endframework voor beheerpanelen, dashboards voor winkeliers en webapps die jaren onderhoudbaar moeten blijven, geen sprints.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","Het opensource spraakherkenningsmodel van OpenAI — de transcriptiemotor achter spraakinvoer, draaiend als backendservice én op het toestel in de app.","whisper","simple-icons:openai",{"id":168,"title":169,"author":170,"body":171,"description":1992,"extension":1993,"hero":1994,"meta":1997,"metaDescription":1998,"metaTitle":1999,"navigation":451,"ogDescription":2000,"path":2001,"seo":2002,"slug":2003,"stem":2004,"summary":2005,"timestamp":2006,"topic":2007,"updated":2008,"__hash__":2009},"blog_nl\u002Fblog\u002Fencryption-explained.md","Versleuteling uitgelegd: van AES tot post-quantumcryptografie en end-to-end berichten","nixan",{"type":172,"value":173,"toc":1954},"minimark",[174,184,189,192,195,212,215,219,222,227,233,236,278,284,288,291,294,351,354,389,404,407,483,487,490,494,505,509,512,515,545,549,552,606,609,680,683,687,694,698,701,705,761,768,772,814,818,821,906,909,913,924,928,935,938,964,967,1040,1047,1062,1066,1076,1079,1092,1095,1131,1134,1278,1281,1285,1292,1335,1338,1342,1345,1353,1356,1367,1373,1393,1398,1418,1423,1453,1456,1460,1463,1467,1476,1485,1489,1497,1500,1504,1513,1533,1537,1540,1572,1576,1579,1583,1586,1612,1621,1625,1628,1648,1651,1655,1664,1671,1674,1680,1686,1692,1698,1785,1788,1792,1795,1833,1837,1840,1872,1875,1885,1889,1950],[175,176,177,178,183],"p",{},"Elk bericht dat je verstuurt, elke betaling die je doet en elk wachtwoord dat je typt leunt op versleuteling. Het is de onzichtbare laag die het digitale leven privé houdt — en ze zit in vrijwel elke applicatie waar je zaak van afhangt. Dit artikel legt uit hoe verschillende soorten versleuteling echte applicaties beschermen, waarom opkomende technieken als elliptische krommen en post-quantumalgoritmen ertoe doen voor je producten, en wat het recente besluit van Instagram om ",[179,180,182],"term",{"slug":181},"end-to-end-encryption","end-to-end-versleuteling"," te laten vallen zegt over de spanning tussen privacy en regelgeving.",[185,186,188],"h2",{"id":187},"wat-versleuteling-werkelijk-doet","Wat versleuteling werkelijk doet",[175,190,191],{},"Versleuteling zet leesbare gegevens (leesbare tekst) om in een onleesbare vorm (cijfertekst) met een geheime waarde die de sleutel heet. Alleen wie de juiste sleutel bezit kan het proces omkeren en de oorspronkelijke gegevens terughalen.",[175,193,194],{},"Twee eigenschappen tellen het zwaarst:",[196,197,198,206],"ul",{},[199,200,201,205],"li",{},[202,203,204],"strong",{},"Vertrouwelijkheid"," — een aanvaller die de cijfertekst onderschept leert niets over de leesbare tekst.",[199,207,208,211],{},[202,209,210],{},"Integriteit"," — moderne versleutelingsschema's merken bovendien op wanneer er onderweg met de cijfertekst is geknoeid.",[175,213,214],{},"Alle praktische versleuteling valt in een van twee families: symmetrisch en asymmetrisch. Echte systemen gebruiken ze samen, en begrijpen waarom helpt je onderbouwde keuzes te maken over de applicaties die je bouwt of gebruikt.",[185,216,218],{"id":217},"symmetrische-versleuteling-het-werkpaard-van-gegevensbescherming","Symmetrische versleuteling: het werkpaard van gegevensbescherming",[175,220,221],{},"Bij symmetrische versleuteling wordt dezelfde sleutel gebruikt om te versleutelen en te ontsleutelen. Zie het als een kluis met één cijfercombinatie: iedereen die de combinatie kent kan hem openen, en die combinatie geheim houden is wat de inhoud beschermt.",[223,224,226],"h3",{"id":225},"waar-je-het-dagelijks-tegenkomt","Waar je het dagelijks tegenkomt",[175,228,229,232],{},[202,230,231],{},"AES (Advanced Encryption Standard)"," is de meest gebruikte symmetrische versleuteling ter wereld. In 2001 door NIST aangenomen, ondersteunt hij sleutellengtes van 128, 192 of 256 bits en wordt hij door vrijwel elke moderne processor in hardware versneld.",[175,234,235],{},"Zo beschermt AES je gegevens in de praktijk:",[196,237,238,244,250,261,267],{},[199,239,240,243],{},[202,241,242],{},"Cloudopslag."," Upload je bestanden naar AWS S3, Google Cloud Storage of Azure Blob Storage, dan worden ze in rust met AES-256 versleuteld. Zelfs wie fysiek bij de opslaghardware komt, leest de gegevens niet zonder de sleutel.",[199,245,246,249],{},[202,247,248],{},"Databaseversleuteling."," PostgreSQL, MongoDB en MySQL bieden alle drie versleuteling op basis van AES om gegevens op schijf te beschermen. Een gestolen databaseback-up is daarmee waardeloos zonder de sleutels.",[199,251,252,260],{},[202,253,254,255,259],{},"HTTPS en ",[179,256,258],{"slug":257},"tls","TLS","."," Elke keer dat je browser een hangslotje toont, doet AES het zware werk. TLS 1.3 gebruikt AES-GCM (Galois\u002FCounter Mode) als belangrijkste versleutelingsalgoritme — het versleutelt gegevens en controleert tegelijk de integriteit ervan, en beschermt zo alles van inloggegevens tot API-aanroepen.",[199,262,263,266],{},[202,264,265],{},"Mobiele applicaties."," Zowel de bestandsversleuteling van Android als Data Protection van Apple gebruikt AES-256 om gegevens op het toestel te versleutelen. Vergrendelt een gebruiker zijn telefoon, dan worden de sleutels uit het geheugen verwijderd en zijn de opgeslagen gegevens onbereikbaar.",[199,268,269,272,273,277],{},[202,270,271],{},"Betalingsverwerking."," ",[179,274,276],{"slug":275},"pci-dss","PCI DSS"," — de beveiligingsstandaard voor het verwerken van kaartgegevens — vereist AES-versleuteling voor kaarthoudergegevens, zowel onderweg als in rust.",[175,279,280,283],{},[202,281,282],{},"ChaCha20-Poly1305"," is een ander symmetrisch versleutelingsalgoritme dat terrein wint. Hij is sneller dan AES op toestellen zonder hardwareversnelling voor AES — vooral oudere smartphones en IoT-apparaten. Google koos hem voor TLS-verbindingen op Android, en het is de standaardversleuteling in WireGuard VPN.",[223,285,287],{"id":286},"probeer-het-zelf-aes-versleuteling-in-je-terminal","Probeer het zelf: AES-versleuteling in je terminal",[175,289,290],{},"Je hebt geen speciale software nodig — OpenSSL staat standaard op macOS, Linux en de meeste serveromgevingen. Open een terminal en probeer deze commando's.",[175,292,293],{},"Versleutel een bericht met AES-256:",[295,296,301],"pre",{"className":297,"code":298,"language":299,"meta":300,"style":300},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","echo \"I want to secure my app with AES\" | openssl enc -aes-256-cbc -a -salt -pass pass:nerdy_pro\n","bash","",[302,303,304],"code",{"__ignoreMap":300},[305,306,309,313,317,321,324,328,332,335,339,342,345,348],"span",{"class":307,"line":308},"line",1,[305,310,312],{"class":311},"sptTA","echo",[305,314,316],{"class":315},"sjJ54"," \"",[305,318,320],{"class":319},"s_sjI","I want to secure my app with AES",[305,322,323],{"class":315},"\"",[305,325,327],{"class":326},"smGrS"," |",[305,329,331],{"class":330},"sbgvK"," openssl",[305,333,334],{"class":319}," enc",[305,336,338],{"class":337},"stzsN"," -aes-256-cbc",[305,340,341],{"class":337}," -a",[305,343,344],{"class":337}," -salt",[305,346,347],{"class":337}," -pass",[305,349,350],{"class":319}," pass:nerdy_pro\n",[175,352,353],{},"De uitvoer is een blok willekeurig ogende Base64-tekst — je versleutelde cijfertekst. Om het te ontsleutelen neem je die uitvoer en draai je:",[295,355,357],{"className":297,"code":356,"language":299,"meta":300,"style":300},"echo \"U2FsdGVkX181dnX8SWIhZTumWK0Uc7Kh947omVSNpH8lujB43L5OjlubfkGa3Y1dyxj5cfzyPZjhWiyGzIWdPw==\" | openssl enc -aes-256-cbc -a -d -salt -pass pass:nerdy_pro\n",[302,358,359],{"__ignoreMap":300},[305,360,361,363,365,368,370,372,374,376,378,380,383,385,387],{"class":307,"line":308},[305,362,312],{"class":311},[305,364,316],{"class":315},[305,366,367],{"class":319},"U2FsdGVkX181dnX8SWIhZTumWK0Uc7Kh947omVSNpH8lujB43L5OjlubfkGa3Y1dyxj5cfzyPZjhWiyGzIWdPw==",[305,369,323],{"class":315},[305,371,327],{"class":326},[305,373,331],{"class":330},[305,375,334],{"class":319},[305,377,338],{"class":337},[305,379,341],{"class":337},[305,381,382],{"class":337}," -d",[305,384,344],{"class":337},[305,386,347],{"class":337},[305,388,350],{"class":319},[175,390,391,392,395,396,399,400,403],{},"Je krijgt je oorspronkelijke bericht terug. OpenSSL toont mogelijk een waarschuwing: ",[302,393,394],{},"*** WARNING : deprecated key derivation used."," — dat is te verwachten. Het betekent dat OpenSSL bij ",[302,397,398],{},"-pass pass:"," op een oudere methode voor sleutelafleiding terugvalt. In productie zou je ",[302,401,402],{},"-pbkdf2"," gebruiken voor sterkere afleiding, maar voor deze demonstratie volstaat de standaard.",[175,405,406],{},"Je kunt ook hele bestanden versleutelen:",[295,408,410],{"className":297,"code":409,"language":299,"meta":300,"style":300},"# Encrypt\nopenssl enc -aes-256-cbc -salt -in report.pdf -out report.pdf.enc -pass pass:nerdy_pro\n\n# Decrypt\nopenssl enc -aes-256-cbc -d -in report.pdf.enc -out report-decrypted.pdf -pass pass:nerdy_pro\n",[302,411,412,418,446,453,459],{"__ignoreMap":300},[305,413,414],{"class":307,"line":308},[305,415,417],{"class":416},"sutJx","# Encrypt\n",[305,419,421,424,426,428,430,433,436,439,442,444],{"class":307,"line":420},2,[305,422,423],{"class":330},"openssl",[305,425,334],{"class":319},[305,427,338],{"class":337},[305,429,344],{"class":337},[305,431,432],{"class":337}," -in",[305,434,435],{"class":319}," report.pdf",[305,437,438],{"class":337}," -out",[305,440,441],{"class":319}," report.pdf.enc",[305,443,347],{"class":337},[305,445,350],{"class":319},[305,447,449],{"class":307,"line":448},3,[305,450,452],{"emptyLinePlaceholder":451},true,"\n",[305,454,456],{"class":307,"line":455},4,[305,457,458],{"class":416},"# Decrypt\n",[305,460,462,464,466,468,470,472,474,476,479,481],{"class":307,"line":461},5,[305,463,423],{"class":330},[305,465,334],{"class":319},[305,467,338],{"class":337},[305,469,382],{"class":337},[305,471,432],{"class":337},[305,473,441],{"class":319},[305,475,438],{"class":337},[305,477,478],{"class":319}," report-decrypted.pdf",[305,480,347],{"class":337},[305,482,350],{"class":319},[223,484,486],{"id":485},"het-probleem-van-sleuteldistributie","Het probleem van sleuteldistributie",[175,488,489],{},"Symmetrische versleuteling is snel en efficiënt, maar beide partijen moeten dezelfde geheime sleutel delen voordat ze kunnen communiceren. Bedient je applicatie een miljoen gebruikers, dan kun je niet vooraf een miljoen verschillende sleutels veilig delen. Precies dat probleem lost asymmetrische cryptografie op.",[185,491,493],{"id":492},"asymmetrische-versleuteling-vertrouwen-tussen-vreemden","Asymmetrische versleuteling: vertrouwen tussen vreemden",[175,495,496,497,500,501,504],{},"Asymmetrische versleuteling gebruikt een sleutelpaar: een ",[202,498,499],{},"publieke sleutel"," die je vrijelijk mag delen, en een ",[202,502,503],{},"private sleutel"," die geheim moet blijven. Gegevens die met de publieke sleutel zijn versleuteld, kunnen alleen met de bijbehorende private sleutel worden ontsleuteld.",[223,506,508],{"id":507},"rsa-het-fundament-van-internetbeveiliging","RSA: het fundament van internetbeveiliging",[175,510,511],{},"RSA, gepubliceerd in 1977, was het eerste praktische cryptosysteem met publieke sleutels. De veiligheid rust op de moeilijkheid van het ontbinden van het product van twee zeer grote priemgetallen — een probleem dat makkelijk op te zetten en met huidige technologie vrijwel onmogelijk om te keren is.",[175,513,514],{},"Zo drijft RSA echte applicaties aan:",[196,516,517,523,529,535],{},[199,518,519,522],{},[202,520,521],{},"SSL- en TLS-certificaten."," Bezoek je een website via HTTPS, dan toont de server een certificaat ondertekend met RSA (of ECC). Je browser verifieert die handtekening om te bevestigen dat je met de echte server praat en niet met een bedrieger. Certificaatautoriteiten als Let's Encrypt geven miljoenen met RSA ondertekende certificaten uit.",[199,524,525,528],{},[202,526,527],{},"Code ondertekenen."," Download je een app uit de Apple App Store of installeer je een Windows-applicatie met een digitale handtekening, dan verifiëren RSA-handtekeningen dat er sinds de publicatie niet met de code is geknoeid.",[199,530,531,534],{},[202,532,533],{},"E-mailversleuteling."," PGP\u002FGPG en S\u002FMIME gebruiken RSA om e-mails te versleutelen en te ondertekenen, en borgen zo zowel privacy als de echtheid van de afzender.",[199,536,537,540,541,544],{},[202,538,539],{},"SSH-toegang."," Systeembeheerders gebruiken RSA-sleutelparen om zonder wachtwoord veilig bij servers te komen — ",[302,542,543],{},"ssh-keygen -t rsa"," is een van de meest gebruikte commando's in elke DevOps-werkstroom.",[223,546,548],{"id":547},"probeer-het-zelf-rsa-versleuteling-in-je-terminal","Probeer het zelf: RSA-versleuteling in je terminal",[175,550,551],{},"Genereer een RSA-sleutelpaar:",[295,553,555],{"className":297,"code":554,"language":299,"meta":300,"style":300},"# Generate a 2048-bit private key\nopenssl genrsa -out private.pem 2048\n\n# Extract the public key\nopenssl rsa -in private.pem -pubout -out public.pem\n",[302,556,557,562,578,582,587],{"__ignoreMap":300},[305,558,559],{"class":307,"line":308},[305,560,561],{"class":416},"# Generate a 2048-bit private key\n",[305,563,564,566,569,571,574],{"class":307,"line":420},[305,565,423],{"class":330},[305,567,568],{"class":319}," genrsa",[305,570,438],{"class":337},[305,572,573],{"class":319}," private.pem",[305,575,577],{"class":576},"srdBf"," 2048\n",[305,579,580],{"class":307,"line":448},[305,581,452],{"emptyLinePlaceholder":451},[305,583,584],{"class":307,"line":455},[305,585,586],{"class":416},"# Extract the public key\n",[305,588,589,591,594,596,598,601,603],{"class":307,"line":461},[305,590,423],{"class":330},[305,592,593],{"class":319}," rsa",[305,595,432],{"class":337},[305,597,573],{"class":319},[305,599,600],{"class":337}," -pubout",[305,602,438],{"class":337},[305,604,605],{"class":319}," public.pem\n",[175,607,608],{},"Versleutel nu een bericht met de publieke sleutel en ontsleutel het met de private:",[295,610,612],{"className":297,"code":611,"language":299,"meta":300,"style":300},"# Encrypt — anyone with your public key can do this\necho \"I want to secure my app with RSA\" | openssl pkeyutl -encrypt -pubin -inkey public.pem -out message.enc\n\n# Decrypt — only the private key holder can do this\nopenssl pkeyutl -decrypt -inkey private.pem -in message.enc\n",[302,613,614,619,654,658,663],{"__ignoreMap":300},[305,615,616],{"class":307,"line":308},[305,617,618],{"class":416},"# Encrypt — anyone with your public key can do this\n",[305,620,621,623,625,628,630,632,634,637,640,643,646,649,651],{"class":307,"line":420},[305,622,312],{"class":311},[305,624,316],{"class":315},[305,626,627],{"class":319},"I want to secure my app with RSA",[305,629,323],{"class":315},[305,631,327],{"class":326},[305,633,331],{"class":330},[305,635,636],{"class":319}," pkeyutl",[305,638,639],{"class":337}," -encrypt",[305,641,642],{"class":337}," -pubin",[305,644,645],{"class":337}," -inkey",[305,647,648],{"class":319}," public.pem",[305,650,438],{"class":337},[305,652,653],{"class":319}," message.enc\n",[305,655,656],{"class":307,"line":448},[305,657,452],{"emptyLinePlaceholder":451},[305,659,660],{"class":307,"line":455},[305,661,662],{"class":416},"# Decrypt — only the private key holder can do this\n",[305,664,665,667,669,672,674,676,678],{"class":307,"line":461},[305,666,423],{"class":330},[305,668,636],{"class":319},[305,670,671],{"class":337}," -decrypt",[305,673,645],{"class":337},[305,675,573],{"class":319},[305,677,432],{"class":337},[305,679,653],{"class":319},[175,681,682],{},"Dat is de kerngedachte: je zakenpartner versleutelt gegevens met jouw publieke sleutel, stuurt de cijfertekst over welk kanaal dan ook (zelfs e-mail), en alleen jij kunt het lezen. Zonder de private sleutel is het versleutelde bestand waardeloos.",[223,684,686],{"id":685},"de-hybride-aanpak","De hybride aanpak",[175,688,689,690,693],{},"In de praktijk is asymmetrische versleuteling te traag om grote hoeveelheden gegevens te versleutelen. Echte systemen gebruiken daarom een ",[202,691,692],{},"hybride aanpak",": RSA (of ECC) wisselt veilig een eenmalige symmetrische sleutel uit, en daarna verzorgt AES de bulkversleuteling op hoge snelheid. Precies zo werken TLS, SSH en PGP onder de motorkap.",[185,695,697],{"id":696},"cryptografie-met-elliptische-krommen-sterkere-beveiliging-kleinere-sleutels","Cryptografie met elliptische krommen: sterkere beveiliging, kleinere sleutels",[175,699,700],{},"Cryptografie met elliptische krommen (ECC) bereikt hetzelfde beveiligingsniveau als RSA met dramatisch kleinere sleutels. Dat vertaalt zich rechtstreeks in snellere verbindingen, kleinere certificaten, minder bandbreedte en betere prestaties op mobiele en IoT-apparaten.",[223,702,704],{"id":703},"het-praktische-verschil","Het praktische verschil",[706,707,708,724],"table",{},[709,710,711],"thead",{},[712,713,714,718,721],"tr",{},[715,716,717],"th",{},"Beveiligingsniveau",[715,719,720],{},"RSA-sleutelgrootte",[715,722,723],{},"ECC-sleutelgrootte",[725,726,727,739,750],"tbody",{},[712,728,729,733,736],{},[730,731,732],"td",{},"Standaard (128 bits)",[730,734,735],{},"3072 bits",[730,737,738],{},"256 bits",[712,740,741,744,747],{},[730,742,743],{},"Hoog (192 bits)",[730,745,746],{},"7680 bits",[730,748,749],{},"384 bits",[712,751,752,755,758],{},[730,753,754],{},"Zeer hoog (256 bits)",[730,756,757],{},"15360 bits",[730,759,760],{},"521 bits",[175,762,763,764,767],{},"Een ECC-sleutel van 256 bits biedt dezelfde bescherming als een RSA-sleutel van 3072 bits — een ",[202,765,766],{},"twaalfvoudige verkleining"," van de sleutel. Voor applicaties die duizenden verbindingen per seconde afhandelen of op batterijen draaien, is dat verschil aanzienlijk.",[223,769,771],{"id":770},"waar-ecc-vandaag-wordt-gebruikt","Waar ECC vandaag wordt gebruikt",[196,773,774,780,786,792,802,808],{},[199,775,776,779],{},[202,777,778],{},"TLS 1.3."," De nieuwste versie van TLS gebruikt uitsluitend sleuteluitwisseling op basis van ECC (ECDHE). Sleuteluitwisseling met RSA is volledig verwijderd. Elke moderne HTTPS-verbinding die je maakt gebruikt elliptische krommen.",[199,781,782,785],{},[202,783,784],{},"Signal en WhatsApp."," Het Signal-protocol gebruikt Curve25519 — een elliptische kromme ontworpen voor hoge prestaties en bestendigheid tegen implementatiefouten — voor de sleuteluitwisseling. Dat is hetzelfde protocol dat berichten van meer dan twee miljard WhatsApp-gebruikers beschermt.",[199,787,788,791],{},[202,789,790],{},"WireGuard VPN."," WireGuard gebruikt Curve25519 voor alle sleuteluitwisselingen, wat bijdraagt aan de reputatie van een eenvoudiger en sneller VPN dan OpenVPN of IPsec.",[199,793,794,797,798,801],{},[202,795,796],{},"SSH-sleutels."," Ed25519 — een handtekeningschema met een elliptische kromme — is het aanbevolen sleuteltype voor SSH geworden. Het levert kortere sleutels en snellere handtekeningen dan RSA: ",[302,799,800],{},"ssh-keygen -t ed25519"," genereert een sleutel die zowel veiliger als handiger is dan de oudere RSA-standaard.",[199,803,804,807],{},[202,805,806],{},"Cryptovaluta."," Bitcoin en Ethereum gebruiken de elliptische kromme secp256k1 om elke transactie te ondertekenen. Verstuur je cryptovaluta, dan bewijst een ECC-handtekening dat je de wallet bezit zonder je private sleutel prijs te geven.",[199,809,810,813],{},[202,811,812],{},"Inloggen met Apple en Google."," Inloggen met Apple gebruikt ECC (P-256) voor zijn identiteitstokens. Cloud KMS van Google ondersteunt ECC-sleutels om te ondertekenen en te verifiëren.",[223,815,817],{"id":816},"probeer-het-zelf-ecc-sleutels-in-je-terminal","Probeer het zelf: ECC-sleutels in je terminal",[175,819,820],{},"Genereer een sleutelpaar met een elliptische kromme en vergelijk het met RSA:",[295,822,824],{"className":297,"code":823,"language":299,"meta":300,"style":300},"# Generate an ECC private key (Curve P-256)\nopenssl ecparam -genkey -name prime256v1 -noout -out ec-private.pem\n\n# Extract the public key\nopenssl ec -in ec-private.pem -pubout -out ec-public.pem\n\n# Compare file sizes — ECC keys are dramatically smaller\nwc -c private.pem ec-private.pem\n",[302,825,826,831,855,859,863,882,887,893],{"__ignoreMap":300},[305,827,828],{"class":307,"line":308},[305,829,830],{"class":416},"# Generate an ECC private key (Curve P-256)\n",[305,832,833,835,838,841,844,847,850,852],{"class":307,"line":420},[305,834,423],{"class":330},[305,836,837],{"class":319}," ecparam",[305,839,840],{"class":337}," -genkey",[305,842,843],{"class":337}," -name",[305,845,846],{"class":319}," prime256v1",[305,848,849],{"class":337}," -noout",[305,851,438],{"class":337},[305,853,854],{"class":319}," ec-private.pem\n",[305,856,857],{"class":307,"line":448},[305,858,452],{"emptyLinePlaceholder":451},[305,860,861],{"class":307,"line":455},[305,862,586],{"class":416},[305,864,865,867,870,872,875,877,879],{"class":307,"line":461},[305,866,423],{"class":330},[305,868,869],{"class":319}," ec",[305,871,432],{"class":337},[305,873,874],{"class":319}," ec-private.pem",[305,876,600],{"class":337},[305,878,438],{"class":337},[305,880,881],{"class":319}," ec-public.pem\n",[305,883,885],{"class":307,"line":884},6,[305,886,452],{"emptyLinePlaceholder":451},[305,888,890],{"class":307,"line":889},7,[305,891,892],{"class":416},"# Compare file sizes — ECC keys are dramatically smaller\n",[305,894,896,899,902,904],{"class":307,"line":895},8,[305,897,898],{"class":330},"wc",[305,900,901],{"class":337}," -c",[305,903,573],{"class":319},[305,905,854],{"class":319},[175,907,908],{},"Je ziet dat de private ECC-sleutel ongeveer vier tot vijf keer kleiner is dan de RSA-sleutel, bij gelijkwaardige beveiliging. Op een server die duizenden TLS-handshakes per seconde afhandelt, telt dat verschil snel op.",[185,910,912],{"id":911},"digitale-handtekeningen-en-controlegetallen-echtheid-en-integriteit-bewijzen","Digitale handtekeningen en controlegetallen: echtheid en integriteit bewijzen",[175,914,915,916,919,920,923],{},"Versleuteling houdt gegevens geheim, maar twee even belangrijke vragen blijven staan: ",[202,917,918],{},"wie stuurde deze gegevens?"," en ",[202,921,922],{},"zijn ze onderweg gewijzigd?"," Digitale handtekeningen en controlegetallen beantwoorden die vragen — en ze zijn net zo fundamenteel voor applicatiebeveiliging als versleuteling zelf.",[223,925,927],{"id":926},"controlegetallen-en-crcs-onbedoelde-beschadiging-opmerken","Controlegetallen en CRC's: onbedoelde beschadiging opmerken",[175,929,930,931,934],{},"Een controlegetal is een korte waarde berekend uit een blok gegevens. Verandert er ook maar één bit, dan verandert het controlegetal mee. De eenvoudigste vorm is de ",[202,932,933],{},"CRC (Cyclic Redundancy Check)"," — een snel algoritme ontworpen om onbedoelde fouten bij overdracht of opslag te vangen.",[175,936,937],{},"Je gebruikt CRC's vaker dan je denkt:",[196,939,940,946,952,958],{},[199,941,942,945],{},[202,943,944],{},"Bestanden downloaden."," Download je een Linux-ISO of een softwarepakket, dan noemt de website vaak een SHA-256- of MD5-controlegetal. Je berekent het controlegetal van je gedownloade bestand en vergelijkt — komen ze overeen, dan is het bestand intact aangekomen.",[199,947,948,951],{},[202,949,950],{},"Netwerkprotocollen."," Ethernetframes, TCP-pakketten en ZIP-bestanden bevatten allemaal CRC-controlegetallen om beschadiging tijdens overdracht te merken.",[199,953,954,957],{},[202,955,956],{},"Databasereplicatie."," Systemen als PostgreSQL gebruiken controlegetallen om beschadiging op schijf te merken voordat die zich naar replica's verspreidt.",[199,959,960,963],{},[202,961,962],{},"Git."," Elke commit, elk bestand en elke boom in een Git-repository wordt geïdentificeerd door een SHA-1-hash. Daarom kan Git elke wijziging in de geschiedenis van de repository opmerken.",[175,965,966],{},"Probeer het in je terminal:",[295,968,970],{"className":297,"code":969,"language":299,"meta":300,"style":300},"# Create a file and compute its SHA-256 checksum\necho \"I want to secure my app with checksums\" > document.txt\nshasum -a 256 document.txt\n\n# Modify even one character and the checksum changes completely\necho \"I want to secure my app with Checksums\" > document.txt\nshasum -a 256 document.txt\n",[302,971,972,977,994,1006,1010,1015,1030],{"__ignoreMap":300},[305,973,974],{"class":307,"line":308},[305,975,976],{"class":416},"# Create a file and compute its SHA-256 checksum\n",[305,978,979,981,983,986,988,991],{"class":307,"line":420},[305,980,312],{"class":311},[305,982,316],{"class":315},[305,984,985],{"class":319},"I want to secure my app with checksums",[305,987,323],{"class":315},[305,989,990],{"class":326}," >",[305,992,993],{"class":319}," document.txt\n",[305,995,996,999,1001,1004],{"class":307,"line":448},[305,997,998],{"class":330},"shasum",[305,1000,341],{"class":337},[305,1002,1003],{"class":576}," 256",[305,1005,993],{"class":319},[305,1007,1008],{"class":307,"line":455},[305,1009,452],{"emptyLinePlaceholder":451},[305,1011,1012],{"class":307,"line":461},[305,1013,1014],{"class":416},"# Modify even one character and the checksum changes completely\n",[305,1016,1017,1019,1021,1024,1026,1028],{"class":307,"line":884},[305,1018,312],{"class":311},[305,1020,316],{"class":315},[305,1022,1023],{"class":319},"I want to secure my app with Checksums",[305,1025,323],{"class":315},[305,1027,990],{"class":326},[305,1029,993],{"class":319},[305,1031,1032,1034,1036,1038],{"class":307,"line":889},[305,1033,998],{"class":330},[305,1035,341],{"class":337},[305,1037,1003],{"class":576},[305,1039,993],{"class":319},[175,1041,1042,1043,1046],{},"De twee controlegetallen zijn volstrekt verschillend — niet net iets anders, maar volledig onherkenbaar ten opzichte van elkaar. Die eigenschap heet het ",[202,1044,1045],{},"lawine-effect",", en die maakt controlegetallen betrouwbaar om wijzigingen op te merken.",[175,1048,1049,1052,1053,1057,1058,1061],{},[202,1050,1051],{},"Belangrijk onderscheid:"," CRC's en eenvoudige controlegetallen merken ",[1054,1055,1056],"em",{},"onbedoelde"," beschadiging op — ze beschermen niet tegen ",[1054,1059,1060],{},"opzettelijk"," knoeien. Een aanvaller die een bestand wijzigt kan het controlegetal simpelweg opnieuw berekenen. Om je tegen opzettelijke wijziging te verdedigen heb je cryptografische handtekeningen nodig.",[223,1063,1065],{"id":1064},"digitale-handtekeningen-bewijzen-wie-de-gegevens-stuurde","Digitale handtekeningen: bewijzen wie de gegevens stuurde",[175,1067,1068,1069,1072,1073,259],{},"Een digitale handtekening gebruikt asymmetrische cryptografie in omgekeerde richting: in plaats van versleutelen met de publieke sleutel en ontsleutelen met de private, ",[202,1070,1071],{},"ondertekent"," de afzender een bericht met zijn private sleutel, en kan iedereen met de publieke sleutel de handtekening ",[202,1074,1075],{},"verifiëren",[175,1077,1078],{},"Dat geeft je twee garanties:",[196,1080,1081,1087],{},[199,1082,1083,1086],{},[202,1084,1085],{},"Authenticatie"," — het bericht is gemaakt door de houder van de private sleutel en door niemand anders.",[199,1088,1089,1091],{},[202,1090,210],{}," — het bericht is na ondertekening niet gewijzigd.",[175,1093,1094],{},"Digitale handtekeningen zitten overal in productiesystemen:",[196,1096,1097,1103,1113,1119,1125],{},[199,1098,1099,1102],{},[202,1100,1101],{},"Software-updates."," Installeert je telefoon een iOS- of Android-update, dan verifieert het besturingssysteem de digitale handtekening van Apple of Google voordat het hem toepast. Een gewijzigde update zonder geldige handtekening wordt geweigerd — de belangrijkste verdediging tegen kwaadaardige firmware.",[199,1104,1105,272,1108,1112],{},[202,1106,1107],{},"API-authenticatie.",[179,1109,1111],{"slug":1110},"jwt","JWT's"," (JSON Web Tokens) voor API-authenticatie zijn digitaal ondertekend. Ontvangt je backend een JWT, dan verifieert hij de handtekening om te bevestigen dat het token door je authenticatieserver is uitgegeven en er niet mee is geknoeid.",[199,1114,1115,1118],{},[202,1116,1117],{},"Pakketbeheerders."," npm, PyPI, Docker Hub en APT gebruiken allemaal handtekeningen om te verifiëren dat pakketten door de opgegeven auteurs zijn gepubliceerd. Aanvallen op de toeleveringsketen — zoals het beruchte event-stream-incident — buiten gaten in die verificatie uit.",[199,1120,1121,1124],{},[202,1122,1123],{},"Blockchaintransacties."," Elke Bitcoin- of Ethereum-transactie wordt met de private sleutel van de afzender ondertekend. Het netwerk verifieert de handtekening voordat het de transactie accepteert — zo werkt cryptovaluta zonder centrale autoriteit.",[199,1126,1127,1130],{},[202,1128,1129],{},"Documenten ondertekenen."," PDF-documenten, contracten en facturen kunnen digitale handtekeningen dragen die het auteurschap bewijzen en wijzigingen opmerken — in de meeste rechtsgebieden juridisch bindend onder eIDAS (EU) en ESIGN (VS).",[175,1132,1133],{},"Probeer zelf een bericht te ondertekenen en te verifiëren:",[295,1135,1137],{"className":297,"code":1136,"language":299,"meta":300,"style":300},"# Create a document\necho \"I want to secure my app with digital signatures\" > message.txt\n\n# Sign it with your RSA private key (from the earlier example)\nopenssl dgst -sha256 -sign private.pem -out message.sig message.txt\n\n# Verify the signature with the public key\nopenssl dgst -sha256 -verify public.pem -signature message.sig message.txt\n# Output: Verified OK\n\n# Now tamper with the file and verify again\necho \"I want to secure my app with Digital Signatures\" > message.txt\nopenssl dgst -sha256 -verify public.pem -signature message.sig message.txt\n# Output: Verification Failure\n",[302,1138,1139,1144,1160,1164,1169,1191,1195,1200,1220,1226,1231,1237,1253,1272],{"__ignoreMap":300},[305,1140,1141],{"class":307,"line":308},[305,1142,1143],{"class":416},"# Create a document\n",[305,1145,1146,1148,1150,1153,1155,1157],{"class":307,"line":420},[305,1147,312],{"class":311},[305,1149,316],{"class":315},[305,1151,1152],{"class":319},"I want to secure my app with digital signatures",[305,1154,323],{"class":315},[305,1156,990],{"class":326},[305,1158,1159],{"class":319}," message.txt\n",[305,1161,1162],{"class":307,"line":448},[305,1163,452],{"emptyLinePlaceholder":451},[305,1165,1166],{"class":307,"line":455},[305,1167,1168],{"class":416},"# Sign it with your RSA private key (from the earlier example)\n",[305,1170,1171,1173,1176,1179,1182,1184,1186,1189],{"class":307,"line":461},[305,1172,423],{"class":330},[305,1174,1175],{"class":319}," dgst",[305,1177,1178],{"class":337}," -sha256",[305,1180,1181],{"class":337}," -sign",[305,1183,573],{"class":319},[305,1185,438],{"class":337},[305,1187,1188],{"class":319}," message.sig",[305,1190,1159],{"class":319},[305,1192,1193],{"class":307,"line":884},[305,1194,452],{"emptyLinePlaceholder":451},[305,1196,1197],{"class":307,"line":889},[305,1198,1199],{"class":416},"# Verify the signature with the public key\n",[305,1201,1202,1204,1206,1208,1211,1213,1216,1218],{"class":307,"line":895},[305,1203,423],{"class":330},[305,1205,1175],{"class":319},[305,1207,1178],{"class":337},[305,1209,1210],{"class":337}," -verify",[305,1212,648],{"class":319},[305,1214,1215],{"class":337}," -signature",[305,1217,1188],{"class":319},[305,1219,1159],{"class":319},[305,1221,1223],{"class":307,"line":1222},9,[305,1224,1225],{"class":416},"# Output: Verified OK\n",[305,1227,1229],{"class":307,"line":1228},10,[305,1230,452],{"emptyLinePlaceholder":451},[305,1232,1234],{"class":307,"line":1233},11,[305,1235,1236],{"class":416},"# Now tamper with the file and verify again\n",[305,1238,1240,1242,1244,1247,1249,1251],{"class":307,"line":1239},12,[305,1241,312],{"class":311},[305,1243,316],{"class":315},[305,1245,1246],{"class":319},"I want to secure my app with Digital Signatures",[305,1248,323],{"class":315},[305,1250,990],{"class":326},[305,1252,1159],{"class":319},[305,1254,1256,1258,1260,1262,1264,1266,1268,1270],{"class":307,"line":1255},13,[305,1257,423],{"class":330},[305,1259,1175],{"class":319},[305,1261,1178],{"class":337},[305,1263,1210],{"class":337},[305,1265,648],{"class":319},[305,1267,1215],{"class":337},[305,1269,1188],{"class":319},[305,1271,1159],{"class":319},[305,1273,1275],{"class":307,"line":1274},14,[305,1276,1277],{"class":416},"# Output: Verification Failure\n",[175,1279,1280],{},"Het gewijzigde bericht zakt voor de verificatie — de handtekening bewijst zowel wie het document maakte als dat het niet is gewijzigd. Dat is hetzelfde mechanisme dat elk HTTPS-certificaat, elke ondertekende Git-commit en elke app die je uit een appwinkel installeert beschermt.",[223,1282,1284],{"id":1283},"hmac-handtekeningen-voor-symmetrische-systemen","HMAC: handtekeningen voor symmetrische systemen",[175,1286,1287,1288,1291],{},"Delen beide partijen een geheime sleutel (zoals bij veel API-koppelingen), dan levert ",[202,1289,1290],{},"HMAC (Hash-based Message Authentication Code)"," integriteit en authenticatie zonder de overhead van cryptografie met publieke sleutels. Stripe, AWS en GitHub gebruiken alle drie HMAC om webhook-payloads te ondertekenen zodat je server kan verifiëren dat ze echt zijn:",[295,1293,1295],{"className":297,"code":1294,"language":299,"meta":300,"style":300},"# Compute an HMAC-SHA256 of a message\necho -n \"I want to secure my app with HMAC\" | openssl dgst -sha256 -hmac \"nerdy_pro\"\n",[302,1296,1297,1302],{"__ignoreMap":300},[305,1298,1299],{"class":307,"line":308},[305,1300,1301],{"class":416},"# Compute an HMAC-SHA256 of a message\n",[305,1303,1304,1306,1309,1311,1314,1316,1318,1320,1322,1324,1327,1329,1332],{"class":307,"line":420},[305,1305,312],{"class":311},[305,1307,1308],{"class":337}," -n",[305,1310,316],{"class":315},[305,1312,1313],{"class":319},"I want to secure my app with HMAC",[305,1315,323],{"class":315},[305,1317,327],{"class":326},[305,1319,331],{"class":330},[305,1321,1175],{"class":319},[305,1323,1178],{"class":337},[305,1325,1326],{"class":337}," -hmac",[305,1328,316],{"class":315},[305,1330,1331],{"class":319},"nerdy_pro",[305,1333,1334],{"class":315},"\"\n",[175,1336,1337],{},"Je server berekent dezelfde HMAC met zijn kopie van het gedeelde geheim en vergelijkt die met de handtekening in de verzoekheader. Komen ze overeen, dan is de webhook echt.",[223,1339,1341],{"id":1340},"jwts-handtekeningen-in-de-praktijk","JWT's: handtekeningen in de praktijk",[175,1343,1344],{},"JSON Web Tokens (JWT's) zijn een van de meest voorkomende toepassingen van digitale handtekeningen. Heeft je applicatie gebruikersauthenticatie, dan is de kans groot dat er JWT's bij betrokken zijn. Een JWT is een compact, URL-veilig token met drie delen gescheiden door punten: een header, een payload en een handtekening.",[295,1346,1351],{"className":1347,"code":1349,"language":1350},[1348],"language-text","eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo0Miwicm9sZSI6Im5lcmR5X2FkbWluIn0.oAi5ALawUM_KpWDkiJcfA8504oQ_Yjx7OhEM8nZxlIc\n","text",[302,1352,1349],{"__ignoreMap":300},[175,1354,1355],{},"De header noemt het ondertekeningsalgoritme. De payload draagt de eigenlijke gegevens — gebruikers-ID, rol, verloopmoment. De handtekening borgt dat er met geen van beide is geknoeid. Je server verifieert de handtekening bij elk verzoek en vertrouwt de payload alleen wanneer die verificatie slaagt.",[175,1357,1358,1359,1366],{},"Probeer dit token zelf te decoderen — plak het in ",[1360,1361,1365],"a",{"href":1362,"rel":1363},"https:\u002F\u002Fjwt.io\u002F",[1364],"nofollow","jwt.io"," en kijk wat erin zit. Je merkt dat je de payload kunt lezen zonder het geheim te kennen. Dat is met opzet: JWT's zijn ondertekend, niet versleuteld. De handtekening bewijst alleen dat er niet met het token is geknoeid — ze verbergt de inhoud niet.",[175,1368,1369,1372],{},[202,1370,1371],{},"Ondertekeningsalgoritmen"," bepalen het beveiligingsmodel:",[196,1374,1375,1381,1387],{},[199,1376,1377,1380],{},[202,1378,1379],{},"HS256 (HMAC-SHA256)"," — symmetrisch. Dezelfde geheime sleutel ondertekent en verifieert het token. Eenvoudig op te zetten, maar elke dienst die tokens moet verifiëren heeft het geheim nodig — en dat wordt een risico naarmate je architectuur groeit.",[199,1382,1383,1386],{},[202,1384,1385],{},"RS256 (RSA-SHA256)"," — asymmetrisch. De authenticatieserver ondertekent met een private sleutel, en elke dienst verifieert met de publieke. Die publieke sleutel mag vrij verspreid worden zonder de beveiliging aan te tasten.",[199,1388,1389,1392],{},[202,1390,1391],{},"ES256 (ECDSA-P256)"," — asymmetrisch, met elliptische krommen. Hetzelfde vertrouwensmodel als RS256, maar met kleinere sleutels en snellere handtekeningen. Steeds vaker de aanbevolen keuze voor nieuwe applicaties.",[175,1394,1395],{},[202,1396,1397],{},"Voordelen van JWT's:",[196,1399,1400,1406,1412],{},[199,1401,1402,1405],{},[202,1403,1404],{},"Stateless authenticatie."," De server hoeft bij elk verzoek geen database of sessieopslag te raadplegen — het token bevat zelf alle informatie om de gebruiker te autoriseren. Dat vereenvoudigt horizontaal schalen over meerdere servers.",[199,1407,1408,1411],{},[202,1409,1410],{},"Vertrouwen tussen diensten."," In microservicearchitecturen ondertekent de authenticatiedienst het token één keer, en kan elke dienst verderop het onafhankelijk verifiëren met de publieke sleutel. Geen gedeelde database of netwerkaanroep nodig.",[199,1413,1414,1417],{},[202,1415,1416],{},"Standaard en overdraagbaar."," JWT's zijn een open standaard (RFC 7519) die door bibliotheken in elke grote programmeertaal wordt ondersteund. Tokens kunnen in HTTP-headers, URL-parameters of cookies mee.",[175,1419,1420],{},[202,1421,1422],{},"Valkuilen om op te letten:",[196,1424,1425,1431,1437,1447],{},[199,1426,1427,1430],{},[202,1428,1429],{},"Tokens zijn niet in te trekken."," Zodra een JWT is ondertekend, is hij geldig tot hij verloopt. Raakt het account van een gebruiker gecompromitteerd, dan kun je bestaande tokens niet ongeldig maken zonder aan de serverkant een blokkeerlijst toe te voegen — wat het stateless voordeel deels tenietdoet. Korte verlooptijden (15 minuten) gecombineerd met refresh tokens beperken dat.",[199,1432,1433,1436],{},[202,1434,1435],{},"De payload is niet versleuteld."," De met Base64 gecodeerde payload is ondertekend maar niet versleuteld — wie het token onderschept kan de inhoud lezen. Zet nooit gevoelige gegevens (wachtwoorden, persoonsgegevens, API-sleutels) in een JWT-payload. Heb je een versleuteld token nodig, gebruik dan JWE (JSON Web Encryption), al voegt dat complexiteit toe.",[199,1438,1439,1442,1443,1446],{},[202,1440,1441],{},"Aanvallen met algoritmeverwarring."," Accepteert de server meerdere algoritmen en controleert hij de ",[302,1444,1445],{},"alg","-header niet streng, dan kan een aanvaller tokens vervalsen — bijvoorbeeld door van RS256 naar HS256 te wisselen en met de publieke sleutel als HMAC-geheim te ondertekenen. Dwing aan de serverkant altijd het verwachte algoritme af.",[199,1448,1449,1452],{},[202,1450,1451],{},"Te grote tokens."," Developers zetten soms te veel in de payload — hele gebruikersprofielen, rechtenlijsten, sessiestate. JWT's gaan bij elk verzoek mee, meestal in een HTTP-header. Grote tokens kosten bandbreedte, kunnen headerlimieten overschrijden en vertragen elke API-aanroep. Houd de payload minimaal: gebruikers-ID, rol, verloopmoment.",[175,1454,1455],{},"Voor de meeste applicaties bieden JWT's met ES256-ondertekening en korte verlooptijden een goede balans tussen veiligheid, prestaties en eenvoud. Heb je tokens nodig die je kunt intrekken, combineer ze dan met een lichte controle aan de serverkant tegen een intrekkingslijst, of gebruik opaque refresh tokens die je onafhankelijk ongeldig kunt maken.",[185,1457,1459],{"id":1458},"de-quantumdreiging-een-reëel-risico-dat-nu-voorbereiding-vraagt","De quantumdreiging: een reëel risico dat nu voorbereiding vraagt",[175,1461,1462],{},"Quantumcomputers gebruiken fundamenteel andere natuurkunde — qubits die tegelijk in meerdere toestanden kunnen bestaan — om bepaalde problemen exponentieel sneller op te lossen dan enige klassieke computer. Voor versleuteling heeft dat specifieke en goed begrepen gevolgen.",[223,1464,1466],{"id":1465},"wat-quantumcomputers-zullen-breken","Wat quantumcomputers zullen breken",[175,1468,1469,1470,1475],{},"In 1994 publiceerde Peter Shor ",[1360,1471,1474],{"href":1472,"rel":1473},"https:\u002F\u002Fieeexplore.ieee.org\u002Fdocument\u002F365700",[1364],"een quantumalgoritme"," dat bewees dat een voldoende krachtige quantumcomputer RSA, ECC en Diffie-Hellman kan breken — in wezen elk asymmetrisch algoritme dat vandaag in gebruik is. Dat is geen theoretische speculatie: het is een bewezen wiskundig resultaat. De enige open vraag is wanneer quantumhardware krachtig genoeg is om het op schaal uit te voeren.",[175,1477,1478,1479,1484],{},"Symmetrische versleuteling als AES wordt minder hard geraakt. ",[1360,1480,1483],{"href":1481,"rel":1482},"https:\u002F\u002Farxiv.org\u002Fabs\u002Fquant-ph\u002F9605043",[1364],"Het algoritme van Grover"," halveert feitelijk de sterkte van symmetrische sleutels — waarmee AES-128 ontoereikend wordt maar AES-256 een comfortabele marge van 128 bits houdt.",[223,1486,1488],{"id":1487},"nu-oogsten-later-ontsleutelen","\"Nu oogsten, later ontsleutelen\"",[175,1490,1491,1492,259],{},"Dit is de dreiging die quantum computing vandaag urgent maakt, niet in een verre toekomst. Inlichtingendiensten en geraffineerde aanvallers onderscheppen en bewaren nu al versleuteld verkeer, met het plan het te ontsleutelen zodra quantumhardware volwassen is. Die strategie staat goed gedocumenteerd in de ",[1360,1493,1496],{"href":1494,"rel":1495},"https:\u002F\u002Fwww.nsa.gov\u002FCybersecurity\u002FPost-Quantum-Cybersecurity-Resources\u002F",[1364],"richtlijnen van de NSA over post-quantumbeveiliging",[175,1498,1499],{},"Voor elke applicatie die gegevens verwerkt met een lange vertrouwelijkheidsduur — medische dossiers, financiële gegevens, juridische communicatie, intellectueel eigendom — is dat een risico van nu, geen hypothese.",[223,1501,1503],{"id":1502},"post-quantumcryptografie-het-antwoord-van-de-branche","Post-quantumcryptografie: het antwoord van de branche",[175,1505,1506,1507,1512],{},"In 2024 ",[1360,1508,1511],{"href":1509,"rel":1510},"https:\u002F\u002Fwww.nist.gov\u002Fnews-events\u002Fnews\u002F2024\u002F08\u002Fnist-releases-first-3-finalized-post-quantum-encryption-standards",[1364],"rondde NIST zijn eerste standaarden voor post-quantumcryptografie af",":",[196,1514,1515,1521,1527],{},[199,1516,1517,1520],{},[202,1518,1519],{},"ML-KEM (CRYSTALS-Kyber)"," — een mechanisme voor sleuteluitwisseling dat ECDH vervangt. Al in productie: Chrome en Cloudflare gebruiken standaard een hybride sleuteluitwisseling met X25519 en ML-KEM.",[199,1522,1523,1526],{},[202,1524,1525],{},"ML-DSA (CRYSTALS-Dilithium)"," — een handtekeningschema dat RSA- en ECDSA-handtekeningen vervangt.",[199,1528,1529,1532],{},[202,1530,1531],{},"SLH-DSA (SPHINCS+)"," — een reserveschema voor handtekeningen op basis van hashfuncties, dat algoritmische diversiteit biedt mocht blijken dat op roosters gebaseerde schema's kwetsbaar zijn.",[223,1534,1536],{"id":1535},"wat-dit-voor-je-applicaties-betekent","Wat dit voor je applicaties betekent",[175,1538,1539],{},"Bouw of onderhoud je vandaag applicaties, dan telt het volgende:",[1541,1542,1543,1549,1555,1566],"ol",{},[199,1544,1545,1548],{},[202,1546,1547],{},"Stap over op AES-256."," Dat is de eenvoudigste stap en levert quantumbestendige symmetrische versleuteling op met vrijwel geen prestatieverlies.",[199,1550,1551,1554],{},[202,1552,1553],{},"Zet hybride sleuteluitwisseling aan."," Moderne TLS-bibliotheken (OpenSSL 3.x, BoringSSL) ondersteunen X25519 met ML-KEM al. Het aanzetten beschermt verbindingen tegen zowel klassieke als quantumaanvallen.",[199,1556,1557,1560,1561,1565],{},[202,1558,1559],{},"Beoordeel je cryptografische afhankelijkheden."," Weet waar RSA en ECC in je stack zitten — dat zijn de onderdelen die uiteindelijk gemigreerd moeten worden. Is je applicatie snel of met AI-programmeergereedschap gebouwd, dan is een ",[1360,1562,1564],{"href":1563},"\u002Fservices\u002Fai-code-audit","audit van AI-code"," de snelste manier om te vinden waar geheimen en zwakke cryptografie zich verstoppen.",[199,1567,1568,1571],{},[202,1569,1570],{},"Reken op grotere sleutels en handtekeningen."," Post-quantumalgoritmen leveren grotere sleutels op dan ECC. Toets dat je protocollen, certificaten en opslag ze aankunnen.",[185,1573,1575],{"id":1574},"end-to-end-versleuteling-de-gouden-standaard-voor-privéberichten","End-to-end-versleuteling: de gouden standaard voor privéberichten",[175,1577,1578],{},"End-to-end-versleuteling (E2EE) betekent dat berichten op het toestel van de afzender worden versleuteld en alleen op het toestel van de ontvanger ontsleuteld kunnen worden. De dienstverlener — of dat nu een berichtenapp, een e-mailplatform of cloudopslag is — kan de inhoud niet lezen, ook niet onder een rechterlijk bevel of na een inbraak.",[223,1580,1582],{"id":1581},"hoe-moderne-e2ee-in-de-praktijk-werkt","Hoe moderne E2EE in de praktijk werkt",[175,1584,1585],{},"Het Signal-protocol, gebruikt door Signal en WhatsApp, combineert meerdere technieken tot een gelaagd systeem:",[1541,1587,1588,1594,1600,1606],{},[199,1589,1590,1593],{},[202,1591,1592],{},"Sleuteluitwisseling met een elliptische kromme (Curve25519)"," — twee toestellen spreken een gedeeld geheim af zonder het ooit over het netwerk te sturen.",[199,1595,1596,1599],{},[202,1597,1598],{},"Het Double Ratchet-algoritme"," — genereert voor elk afzonderlijk bericht een nieuwe sleutel. Bemachtigt een aanvaller op de een of andere manier één sleutel, dan kan hij eerdere noch latere berichten ontsleutelen. Die eigenschap heet forward secrecy.",[199,1601,1602,1605],{},[202,1603,1604],{},"AES-256 of ChaCha20"," — versleutelt de eigenlijke berichtinhoud op hoge snelheid.",[199,1607,1608,1611],{},[202,1609,1610],{},"HMAC-authenticatie"," — zorgt dat er onderweg niet met berichten kan worden geknoeid.",[175,1613,1614,1615,1620],{},"Het resultaat is dat elk bericht een unieke sleutel heeft, sleutels nooit worden hergebruikt, en de schade van één gecompromitteerde sleutel beperkt blijft. Daarom ",[1360,1616,1619],{"href":1617,"rel":1618},"https:\u002F\u002Feprint.iacr.org\u002F2016\u002F1013.pdf",[1364],"bevelen beveiligingsonderzoekers het Signal-protocol consequent aan"," als de stand van de techniek in berichtenbeveiliging.",[223,1622,1624],{"id":1623},"de-uitdaging-van-groepsberichten","De uitdaging van groepsberichten",[175,1626,1627],{},"E2EE in gesprekken tussen twee mensen is een opgelost probleem. Groepsgesprekken zijn aanzienlijk lastiger. Heeft een groep 50, 200 of 1000 leden, dan moet het protocol nog een aantal complicaties aan:",[196,1629,1630,1636,1642],{},[199,1631,1632,1635],{},[202,1633,1634],{},"Sleuteldistributie op schaal."," Elk bericht moet zo versleuteld worden dat alle huidige groepsleden — en alleen zij — het kunnen lezen. Het Signal-protocol gebruikt een mechanisme dat sender keys heet: elke deelnemer deelt een symmetrische sleutel met de groep, en berichten worden één keer versleuteld in plaats van één keer per ontvanger. Zo blijft groepsberichten sturen ook bij grote aantallen snel.",[199,1637,1638,1641],{},[202,1639,1640],{},"Wijzigingen in het ledenbestand."," Komt iemand bij een groep of vertrekt iemand, dan moeten de sleutels worden gewisseld zodat het nieuwe lid eerdere berichten niet kan lezen en het vertrokken lid latere niet. WhatsApp en Signal doen dat automatisch, maar het kost vertraging en overhead — zeker in grote groepen met veel verloop.",[199,1643,1644,1647],{},[202,1645,1646],{},"Meerdere toestellen."," Heeft een gebruiker een telefoon, een tablet en een desktopclient, dan heeft elk toestel eigen sleutels. Het protocol moet borgen dat alle toestellen groepsberichten kunnen ontsleutelen terwijl forward secrecy intact blijft. Het iMessage-protocol van Apple en de architectuur voor meerdere toestellen van Signal maken hierin verschillende afwegingen.",[175,1649,1650],{},"Voor bedrijven die functies voor groepssamenwerking bouwen — teamchats, projectkanalen, gedeelde werkruimtes — zijn dat geen theoretische zorgen. De architectuurkeuzes die vroeg in de bouw vallen bepalen of E2EE haalbaar is op de schaal die het product uiteindelijk nodig heeft.",[223,1652,1654],{"id":1653},"de-terugdraai-van-instagram-een-waarschuwing","De terugdraai van Instagram: een waarschuwing",[175,1656,1657,1658,1663],{},"In december 2023 rolde Meta E2EE standaard uit voor Messenger en begon het die uit te breiden naar de privéberichten van Instagram. De technische inspanning was enorm — het team van Meta beschreef de ",[1360,1659,1662],{"href":1660,"rel":1661},"https:\u002F\u002Fengineering.fb.com\u002F2024\u002F02\u002F22\u002Fsecurity\u002Fend-to-end-encryption-messenger-update\u002F",[1364],"meerjarige verbouwing van de infrastructuur"," die nodig was om functies als zoeken, linkvoorbeelden en spamdetectie te herbouwen zonder toegang aan de serverkant tot berichtinhoud.",[175,1665,1666,1667,1670],{},"In maart 2026 draaide Meta het terug. Het bedrijf kondigde aan dat ",[202,1668,1669],{},"Instagram op 8 mei 2026 E2EE uit de privéberichten haalt",". Anders dan bij WhatsApp, waar E2EE de standaard is voor alle gebruikers, was versleuteld berichten sturen op Instagram alleen beschikbaar als optie in bepaalde regio's — en Meta noemde het lage gebruik als reden om het te stoppen.",[175,1672,1673],{},"Die terugdraai is om meerdere redenen veelzeggend:",[175,1675,1676,1679],{},[202,1677,1678],{},"Privacy als functie, geen garantie."," De E2EE van Instagram was nooit werkelijk \"standaard\" — gebruikers moesten hem per gesprek aanzetten, en hij was alleen in bepaalde landen beschikbaar. Dat staat in schril contrast met WhatsApp, waar elk bericht sinds 2016 end-to-end versleuteld is zonder dat de gebruiker iets hoeft te doen. De les: staat versleuteling niet standaard aan, dan blijft het gebruik laag, en wordt dat lage gebruik de rechtvaardiging om het te verwijderen.",[175,1681,1682,1685],{},[202,1683,1684],{},"Regeldruk wint."," Overheden in de VS, het VK, de EU en Australië hebben zich hard tegen E2EE in berichtenapps verzet, met het argument dat het onderzoek naar kindermisbruik en terrorisme belemmert. De Britse Online Safety Act bevat bepalingen die platforms zouden kunnen dwingen E2EE te breken. De voorgestelde EU-verordening \"Chat Control\" zou het scannen van berichten aan de clientkant vóór versleuteling verplichten. E2EE uit de privéberichten van Instagram halen stelt Meta in staat berichten te scannen op materiaal van seksueel kindermisbruik en andere schadelijke inhoud — in lijn met wat toezichthouders verwachten.",[175,1687,1688,1691],{},[202,1689,1690],{},"Gebruikers verliezen de regie."," Meta vertelde getroffen gebruikers hun versleutelde berichten en media vóór de deadline van 8 mei te downloaden, want versleutelde gespreksgeschiedenis wordt niet naar gewone onversleutelde gesprekken meegenomen. Wie E2EE wil, wordt naar WhatsApp verwezen.",[175,1693,1694,1697],{},[202,1695,1696],{},"Het E2EE-landschap vandaag."," Zo verhouden de grote platforms zich na de terugdraai van Instagram:",[706,1699,1700,1713],{},[709,1701,1702],{},[712,1703,1704,1707,1710],{},[715,1705,1706],{},"Platform",[715,1708,1709],{},"E2EE standaard",[715,1711,1712],{},"Protocol",[725,1714,1715,1726,1736,1747,1761,1775],{},[712,1716,1717,1720,1723],{},[730,1718,1719],{},"Signal",[730,1721,1722],{},"Ja (altijd)",[730,1724,1725],{},"Signal-protocol",[712,1727,1728,1731,1734],{},[730,1729,1730],{},"WhatsApp",[730,1732,1733],{},"Ja (sinds 2016)",[730,1735,1725],{},[712,1737,1738,1741,1744],{},[730,1739,1740],{},"iMessage",[730,1742,1743],{},"Ja",[730,1745,1746],{},"Eigen protocol van Apple",[712,1748,1749,1752,1758],{},[730,1750,1751],{},"Instagram DM",[730,1753,1754,1757],{},[202,1755,1756],{},"Verwijderd"," (mei 2026)",[730,1759,1760],{},"n.v.t.",[712,1762,1763,1766,1772],{},[730,1764,1765],{},"Telegram",[730,1767,1768,1771],{},[202,1769,1770],{},"Nee"," (alleen optionele \"geheime chats\")",[730,1773,1774],{},"MTProto",[712,1776,1777,1780,1782],{},[730,1778,1779],{},"Discord",[730,1781,1770],{},[730,1783,1784],{},"n.v.t. (alleen versleuteld onderweg)",[175,1786,1787],{},"Het gat tussen platforms die versleuteling als kernarchitectuurkeuze behandelen (Signal, WhatsApp, iMessage) en platforms die haar als optionele functie behandelen (Instagram, Telegram, Discord) was nooit duidelijker. Voor bedrijven die berichtenfuncties bouwen is dat het cruciale ontwerpbesluit: E2EE moet fundamenteel zijn, niet erop geschroefd — want optionele versleuteling kan worden afgenomen.",[223,1789,1791],{"id":1790},"wat-e2ee-niet-beschermt","Wat E2EE niet beschermt",[175,1793,1794],{},"Voor elke applicatie die E2EE inbouwt of erop leunt is het belangrijk de grenzen te kennen:",[196,1796,1797,1809,1821,1827],{},[199,1798,1799,1802,1803,1808],{},[202,1800,1801],{},"Metadata."," E2EE beschermt inhoud, geen metadata. Het platform weet nog steeds wie wie berichtte, wanneer, hoe vaak, en vanaf welk IP-adres. ",[1360,1804,1807],{"href":1805,"rel":1806},"https:\u002F\u002Fwww.eff.org\u002Fdeeplinks\u002F2013\u002F06\u002Fwhy-metadata-matters",[1364],"Onderzoek van de EFF"," heeft laten zien dat metadata alleen al gevoelige informatie over relaties en gedragspatronen kan prijsgeven.",[199,1810,1811,1814,1815,1820],{},[202,1812,1813],{},"Gecompromitteerd eindpunt."," Is het toestel zelf gecompromitteerd — door malware, spyware als ",[1360,1816,1819],{"href":1817,"rel":1818},"https:\u002F\u002Fcitizenlab.ca\u002F2021\u002F07\u002Fhooking-candiru-another-mercenary-spyware-vendor-comes-into-focus\u002F",[1364],"Pegasus",", of fysieke toegang — dan leest de aanvaller berichten na ontsleuteling. E2EE beschermt gegevens onderweg en op de server, niet op een gecompromitteerd toestel.",[199,1822,1823,1826],{},[202,1824,1825],{},"Cloudback-ups."," Staan gespreksback-ups onversleuteld in iCloud of Google Drive, dan is E2EE feitelijk omzeild. WhatsApp biedt versleutelde back-ups, maar gebruikers moeten die zelf aanzetten.",[199,1828,1829,1832],{},[202,1830,1831],{},"Menselijke factoren."," Geen enkel cryptografisch protocol houdt tegen dat een ontvanger een schermafbeelding maakt of via social engineering wordt overgehaald een gesprek te delen.",[185,1834,1836],{"id":1835},"hoe-het-in-een-echte-applicatie-samenkomt","Hoe het in een echte applicatie samenkomt",[175,1838,1839],{},"Wanneer wij veilige applicaties voor klanten bouwen, is versleuteling geen enkele functie — het is een gelaagde architectuur waarin elk soort versleuteling een specifieke rol speelt:",[1541,1841,1842,1848,1854,1860,1866],{},[199,1843,1844,1847],{},[202,1845,1846],{},"Cryptografie met elliptische krommen"," vestigt vertrouwen tussen partijen en wisselt veilig sleutels uit — met kleinere, snellere sleutels dan oudere aanpakken op RSA.",[199,1849,1850,1853],{},[202,1851,1852],{},"Symmetrische versleuteling (AES-256)"," verzorgt de snelle versleuteling van de eigenlijke gegevens — bestanden, berichten, databaserecords, API-payloads.",[199,1855,1856,1859],{},[202,1857,1858],{},"Digitale handtekeningen en controlegetallen"," bewijzen echtheid en merken geknoei op — van ondertekende API-tokens en software-updates tot geverifieerde webhook-payloads.",[199,1861,1862,1865],{},[202,1863,1864],{},"End-to-end-versleuteling"," zorgt dat zelfs de dienstverlener niet bij gebruikersinhoud kan — essentieel voor zorg, juridische technologie, financiën, en elke applicatie waar privacy een eis van toezichthouders of van de concurrentie is.",[199,1867,1868,1871],{},[202,1869,1870],{},"Gereedheid voor post-quantum"," beschermt langlevende gegevens tegen toekomstige dreigingen — iets waar vooruitkijkende bedrijven nu al mee bezig zijn.",[175,1873,1874],{},"De juiste versleutelingsstrategie hangt af van wat je bouwt: een mobiele app met persoonsgegevens, een B2B-platform dat financiële dossiers verwerkt, een berichtenfunctie, of een IoT-systeem. Elk kent andere dreigingsmodellen en regels, en de versleutelingsarchitectuur hoort daarbij te passen.",[175,1876,1877,1878,1880,1881,259],{},"Die architectuur goed krijgen — en de plekken vangen waar ze stilletjes breekt, zoals geheimen die in versiebeheer belanden of persoonsgegevens die in leesbare tekst worden gelogd — is precies waar we in een ",[1360,1879,1564],{"href":1563}," naar zoeken. Lever je een applicatie op die gevoelige gegevens verwerkt en wil je een tweede paar ogen op de beveiliging, ",[1360,1882,1884],{"href":1883},"\u002Fcontact","neem dan contact op",[185,1886,1888],{"id":1887},"bronnen","Bronnen",[196,1890,1891,1899,1907,1915,1922,1929,1936,1943],{},[199,1892,1893,1894,1898],{},"Shor, P. (1994). ",[1360,1895,1897],{"href":1472,"rel":1896},[1364],"Algorithms for quantum computation: discrete logarithms and factoring",". Proceedings 35th Annual Symposium on Foundations of Computer Science.",[199,1900,1901,1902,1906],{},"Grover, L. (1996). ",[1360,1903,1905],{"href":1481,"rel":1904},[1364],"A fast quantum mechanical algorithm for database search",". arXiv.",[199,1908,1909,1910,1914],{},"Cohn-Gordon, K. et al. (2016). ",[1360,1911,1913],{"href":1617,"rel":1912},[1364],"A formal security analysis of the Signal messaging protocol",". Cryptology ePrint Archive.",[199,1916,1917,1918,259],{},"NIST (2024). ",[1360,1919,1921],{"href":1509,"rel":1920},[1364],"Post-Quantum Encryption Standards",[199,1923,1924,1925,259],{},"NSA (2022). ",[1360,1926,1928],{"href":1494,"rel":1927},[1364],"Post-Quantum Cybersecurity Resources",[199,1930,1931,1932,259],{},"Meta Engineering (2024). ",[1360,1933,1935],{"href":1660,"rel":1934},[1364],"End-to-end encryption on Messenger",[199,1937,1938,1939,259],{},"EFF (2013). ",[1360,1940,1942],{"href":1805,"rel":1941},[1364],"Why metadata matters",[199,1944,1945,1946,259],{},"Citizen Lab (2021). ",[1360,1947,1949],{"href":1817,"rel":1948},[1364],"Hooking Candiru: another mercenary spyware vendor comes into focus",[1951,1952,1953],"style",{},"html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":300,"searchDepth":420,"depth":420,"links":1955},[1956,1957,1962,1967,1972,1978,1984,1990,1991],{"id":187,"depth":420,"text":188},{"id":217,"depth":420,"text":218,"children":1958},[1959,1960,1961],{"id":225,"depth":448,"text":226},{"id":286,"depth":448,"text":287},{"id":485,"depth":448,"text":486},{"id":492,"depth":420,"text":493,"children":1963},[1964,1965,1966],{"id":507,"depth":448,"text":508},{"id":547,"depth":448,"text":548},{"id":685,"depth":448,"text":686},{"id":696,"depth":420,"text":697,"children":1968},[1969,1970,1971],{"id":703,"depth":448,"text":704},{"id":770,"depth":448,"text":771},{"id":816,"depth":448,"text":817},{"id":911,"depth":420,"text":912,"children":1973},[1974,1975,1976,1977],{"id":926,"depth":448,"text":927},{"id":1064,"depth":448,"text":1065},{"id":1283,"depth":448,"text":1284},{"id":1340,"depth":448,"text":1341},{"id":1458,"depth":420,"text":1459,"children":1979},[1980,1981,1982,1983],{"id":1465,"depth":448,"text":1466},{"id":1487,"depth":448,"text":1488},{"id":1502,"depth":448,"text":1503},{"id":1535,"depth":448,"text":1536},{"id":1574,"depth":420,"text":1575,"children":1985},[1986,1987,1988,1989],{"id":1581,"depth":448,"text":1582},{"id":1623,"depth":448,"text":1624},{"id":1653,"depth":448,"text":1654},{"id":1790,"depth":448,"text":1791},{"id":1835,"depth":420,"text":1836},{"id":1887,"depth":420,"text":1888},"Elk bericht dat je verstuurt, elke betaling die je doet en elk wachtwoord dat je typt leunt op versleuteling. Het is de onzichtbare laag die het digitale leven privé houdt — en ze zit in vrijwel elke applicatie waar je zaak van afhangt. Dit artikel legt uit hoe verschillende soorten versleuteling echte applicaties beschermen, waarom opkomende technieken als elliptische krommen en post-quantumalgoritmen ertoe doen voor je producten, en wat het recente besluit van Instagram om end-to-end-versleuteling te laten vallen zegt over de spanning tussen privacy en regelgeving.","md",{"type":1995,"src":1996},"image","\u002Fblog\u002Fencryption-explained.webp",{},"Een praktische gids over hoe versleuteling echte apps beschermt — symmetrisch en met publieke sleutels, elliptische krommen, handtekeningen, quantum en E2E.","Versleuteling uitgelegd: van AES tot post-quantum","Wat de cryptografie in je app werkelijk doet — AES, publieke sleutels, elliptische krommen, handtekeningen — en wat een quantumcomputer wel en niet zou breken.","\u002Fblog\u002Fencryption-explained",{"title":169,"description":1992},"encryption-explained","blog\u002Fencryption-explained","Een praktische gids over hoe versleuteling echte applicaties beschermt — symmetrische versleuteling, cryptografie met publieke sleutels, elliptische krommen, digitale handtekeningen, de dreiging van quantumcomputers, en waarom end-to-end-versleuteling in berichtenapps als Instagram belangrijker is dan ooit.","2026-03-15T17:14:36Z","cybersecurity","2026-06-04T12:00:00Z","ctgV_MyCaU7rOaYJiTTAu7XD8VGmAsaqIP9bgKLZcvc",[2011,2068,2116,2166,2255,2307],{"id":2012,"bio":2013,"expertise":2018,"extension":2034,"links":2035,"meta":2039,"metaDescription":2040,"name":2045,"ogDescription":2048,"photo":2053,"role":2054,"seniority":2059,"skills":2060,"slug":2061,"specialization":2062,"stem":2061,"__hash__":2067},"team_members\u002Fdima.yaml",{"en":2014,"ru":2015,"es":2016,"nl":2017},"Dima has been building with [Flutter](\u002Ftechnologies\u002Fflutter) since 2021, and specializes in :term[state management]{slug=\"state-management\"} and app architecture.\n\nHe has hands-on experience with real-time communication protocols — :term{slug=\"webrtc\"} for audio and video, and :term{slug=\"xmpp\"} for messaging — which makes him comfortable with the network-heavy, stateful features many teams struggle to get right.\n","Дима работает с [Flutter](\u002Ftechnologies\u002Fflutter) с 2021 года и специализируется на :term[state management]{slug=\"state-management\"} и архитектуре приложений.\n\nУ него есть практический опыт с протоколами реального времени — :term{slug=\"webrtc\"} для аудио и видео и :term{slug=\"xmpp\"} для обмена сообщениями, — поэтому ему близки сетевые stateful-фичи, которые многим командам даются с трудом.\n","Dima trabaja con [Flutter](\u002Ftechnologies\u002Fflutter) desde 2021 y se especializa en :term[gestión de estado]{slug=\"state-management\"} y arquitectura de aplicaciones.\n\nTiene experiencia práctica con protocolos de comunicación en tiempo real —:term{slug=\"webrtc\"} para audio y vídeo, y :term{slug=\"xmpp\"} para mensajería—, lo que le hace sentirse cómodo con esas funcionalidades con mucho estado y mucha red que a muchos equipos se les atragantan.\n","Dima werkt sinds 2021 met [Flutter](\u002Ftechnologies\u002Fflutter) en is gespecialiseerd in :term[state management]{slug=\"state-management\"} en applicatiearchitectuur.\n\nHij heeft praktijkervaring met protocollen voor realtime communicatie — :term{slug=\"webrtc\"} voor audio en video, en :term{slug=\"xmpp\"} voor berichten — waardoor hij zich thuis voelt bij de netwerkzware functies met veel staat waar veel teams moeite mee hebben.\n",[2019,2022,2027,2029],{"en":2020,"ru":2020,"es":2021,"nl":2020},"State management","Gestión de estado",{"en":2023,"ru":2024,"es":2025,"nl":2026},"Application architecture","Архитектура приложений","Arquitectura de aplicaciones","Applicatiearchitectuur",{"en":2028,"ru":2028,"es":2028,"nl":2028},"WebRTC",{"en":2030,"ru":2031,"es":2032,"nl":2033},"XMPP messaging","Обмен сообщениями по XMPP","Mensajería XMPP","Berichten via XMPP","yaml",[2036],{"type":2037,"address":2038},"email","konopatov@nerdy.pro",{},{"en":2041,"ru":2042,"es":2043,"nl":2044},"Lead Flutter developer at Nerdy Production, building real-time apps since 2021 — state management, app architecture, WebRTC and XMPP.","Ведущий Flutter-разработчик Nerdy Production: приложения реального времени с 2021 года — state management, архитектура, WebRTC и XMPP.","Lead de desarrollo Flutter en Nerdy Production, construyendo apps en tiempo real desde 2021: gestión de estado, arquitectura de aplicaciones, WebRTC y XMPP.","Lead Flutter-developer bij Nerdy Production, bouwt sinds 2021 realtime-apps — state management, applicatiearchitectuur, WebRTC en XMPP.",{"en":2046,"ru":2047,"es":2046,"nl":2046},"Dima","Дима",{"en":2049,"ru":2050,"es":2051,"nl":2052},"Lead Flutter developer at Nerdy Production — real-time apps since 2021, and the state management that keeps them from falling over.","Ведущий Flutter-разработчик Nerdy Production: приложения реального времени с 2021 года и state management, на котором они держатся.","Lead de desarrollo Flutter en Nerdy Production: apps en tiempo real desde 2021 y la gestión de estado que evita que se caigan.","Lead Flutter-developer bij Nerdy Production — realtime-apps sinds 2021, en het state management dat ze overeind houdt.","\u002Fteam\u002Fdima.webp",{"en":2055,"ru":2056,"es":2057,"nl":2058},"Lead Flutter Developer","Ведущий Flutter-разработчик","Lead de desarrollo Flutter","Lead Flutter-developer","lead",[41,18,155,160,90,111,150,95],"dima",{"en":2063,"ru":2064,"es":2065,"nl":2066},"Real-time apps, state management, and architecture","Приложения реального времени, state management и архитектура","Apps en tiempo real, gestión de estado y arquitectura","Realtime-apps, state management en architectuur","1TuxUt3zjdVkQUvMf9dBITG872C0exrdZyyoKw1beiE",{"id":2069,"bio":2070,"expertise":2075,"extension":2034,"links":2086,"meta":2087,"metaDescription":2088,"name":2093,"ogDescription":2096,"photo":2101,"role":2102,"seniority":2107,"skills":2108,"slug":2109,"specialization":2110,"stem":2109,"__hash__":2115},"team_members\u002Fmasha.yaml",{"en":2071,"ru":2072,"es":2073,"nl":2074},"Masha builds [Flutter](\u002Ftechnologies\u002Fflutter) apps where design and copy are treated as one job.\n\nShe specializes in UI\u002FUX — turning product requirements into clean, usable interfaces — and in the writing inside the app, from onboarding flows to the microcopy that makes a screen make sense. The result is apps that feel considered, not just functional.\n","Маша делает приложения на [Flutter](\u002Ftechnologies\u002Fflutter), где дизайн и текст — одна задача.\n\nОна специализируется на UI\u002FUX, превращая продуктовые требования в чистые и удобные интерфейсы, и на текстах внутри приложения — от онбординга до микрокопирайта, который делает экран понятным. В итоге приложения получаются продуманными, а не просто рабочими.\n","Masha crea apps en [Flutter](\u002Ftechnologies\u002Fflutter) donde el diseño y el texto se tratan como un mismo trabajo.\n\nSe especializa en UI\u002FUX —convertir requisitos de producto en interfaces limpias y usables— y en la escritura dentro de la app, desde los flujos de onboarding hasta el microcopy que hace que una pantalla se entienda. El resultado son apps que se sienten pensadas, no solo funcionales.\n","Masha bouwt [Flutter](\u002Ftechnologies\u002Fflutter)-apps waarin ontwerp en tekst als één taak worden behandeld.\n\nZe is gespecialiseerd in UI\u002FUX — productwensen omzetten in heldere, bruikbare interfaces — en in de teksten binnen de app, van onboarding tot de microteksten die een scherm begrijpelijk maken. Het resultaat zijn apps die doordacht aanvoelen en niet alleen werken.\n",[2076,2081],{"en":2077,"ru":2078,"es":2079,"nl":2080},"UI\u002FUX design","UI\u002FUX-дизайн","Diseño UI\u002FUX","UI\u002FUX-ontwerp",{"en":2082,"ru":2083,"es":2084,"nl":2085},"Product copywriting","Продуктовый копирайтинг","Redacción de producto","Productteksten",null,{},{"en":2089,"ru":2090,"es":2091,"nl":2092},"Flutter developer at Nerdy Production working where design meets copy — UI\u002FUX, onboarding flows, and the microcopy that makes a screen make sense.","Flutter-разработчик Nerdy Production на стыке дизайна и текста: UI\u002FUX, онбординг и микрокопирайт, который делает экран понятным.","Desarrolladora Flutter en Nerdy Production, donde el diseño se encuentra con el texto: UI\u002FUX, onboarding y el microcopy que hace que una pantalla se entienda.","Flutter-developer bij Nerdy Production op het snijvlak van ontwerp en tekst — UI\u002FUX, onboarding, en de microteksten die een scherm begrijpelijk maken.",{"en":2094,"ru":2095,"es":2094,"nl":2094},"Masha","Маша",{"en":2097,"ru":2098,"es":2099,"nl":2100},"Flutter developer at Nerdy Production working where design meets copy — onboarding flows and the microcopy that makes a screen make sense.","Flutter-разработчик Nerdy Production на стыке дизайна и текста: онбординг и микрокопирайт, который делает экран понятным.","Desarrolladora Flutter en Nerdy Production, donde el diseño se encuentra con el texto: onboarding y el microcopy que hace entender una pantalla.","Flutter-developer bij Nerdy Production op het snijvlak van ontwerp en tekst — onboarding en de microteksten die een scherm begrijpelijk maken.","\u002Fteam\u002Fmasha.webp",{"en":2103,"ru":2104,"es":2105,"nl":2106},"Flutter Developer","Flutter-разработчик","Desarrolladora Flutter","Flutter-developer","middle",[41,18],"masha",{"en":2111,"ru":2112,"es":2113,"nl":2114},"UI\u002FUX and copywriting for Flutter apps","UI\u002FUX и копирайтинг для Flutter-приложений","UI\u002FUX y redacción para apps Flutter","UI\u002FUX en teksten voor Flutter-apps","z3c64iWR39RIrn8wE0elSy00IfCITYgNkbgp_G_sslk",{"id":2117,"bio":2118,"expertise":2123,"extension":2034,"links":2134,"meta":2137,"metaDescription":2138,"name":2143,"ogDescription":2146,"photo":2151,"role":2152,"seniority":2157,"skills":2158,"slug":2159,"specialization":2160,"stem":2159,"__hash__":2165},"team_members\u002Fmaxim.yaml",{"en":2119,"ru":2120,"es":2121,"nl":2122},"Maxim is a polyglot engineer who moves comfortably across [Go](\u002Ftechnologies\u002Fgo), [Flutter](\u002Ftechnologies\u002Fflutter), [Python](\u002Ftechnologies\u002Fpython), and [TypeScript](\u002Ftechnologies\u002Ftypescript), which lets him own a feature from the backend to the screen.\n\nHe came up at Ozon, one of Russia's largest marketplaces, where scale makes reliability non-negotiable — and it shows in his work: testing is a first-class part of how he builds, not an afterthought bolted on at the end.\n","Максим — полиглот-инженер, свободно работающий с [Go](\u002Ftechnologies\u002Fgo), [Flutter](\u002Ftechnologies\u002Fflutter), [Python](\u002Ftechnologies\u002Fpython) и [TypeScript](\u002Ftechnologies\u002Ftypescript), что позволяет ему вести фичу от бэкенда до экрана.\n\nОн вырос в Ozon, одном из крупнейших маркетплейсов России, где масштаб делает надёжность обязательной, — и это видно в его работе: тестирование для него первоклассная часть разработки, а не то, что прикручивают в конце.\n","Maxim es un ingeniero políglota que se mueve con soltura entre [Go](\u002Ftechnologies\u002Fgo), [Flutter](\u002Ftechnologies\u002Fflutter), [Python](\u002Ftechnologies\u002Fpython) y [TypeScript](\u002Ftechnologies\u002Ftypescript), lo que le permite hacerse cargo de una funcionalidad desde el backend hasta la pantalla.\n\nSe formó en Ozon, uno de los mayores marketplaces de Rusia, donde la escala hace que la fiabilidad no sea negociable, y se le nota: el testing es para él una parte de primera clase de cómo construye, no un añadido al final.\n","Maxim is een polyglotte engineer die zich moeiteloos beweegt tussen [Go](\u002Ftechnologies\u002Fgo), [Flutter](\u002Ftechnologies\u002Fflutter), [Python](\u002Ftechnologies\u002Fpython) en [TypeScript](\u002Ftechnologies\u002Ftypescript), waardoor hij een functie van de backend tot het scherm kan dragen.\n\nHij is opgegroeid bij Ozon, een van de grootste marktplaatsen van Rusland, waar schaal betrouwbaarheid onderhandelbaar maakt noch toestaat — en dat zie je terug in zijn werk: testen is bij hem een volwaardig onderdeel van hoe hij bouwt, geen bijzaak die er aan het eind bij komt.\n",[2124,2129],{"en":2125,"ru":2126,"es":2127,"nl":2128},"Automated testing","Автоматизированное тестирование","Testing automatizado","Geautomatiseerd testen",{"en":2130,"ru":2131,"es":2132,"nl":2133},"High-load backend systems","Высоконагруженные бэкенд-системы","Sistemas backend de alta carga","Backendsystemen met hoge belasting",[2135],{"type":2037,"address":2136},"maxim@nerdy.pro",{},{"en":2139,"ru":2140,"es":2141,"nl":2142},"Senior engineer at Nerdy Production across Go, Flutter, Python and TypeScript — from backend to screen, with automated testing built in.","Старший инженер Nerdy Production: Go, Flutter, Python и TypeScript — от бэкенда до экрана, с автотестами как частью разработки.","Ingeniero senior en Nerdy Production con Go, Flutter, Python y TypeScript: del backend a la pantalla, con testing automatizado incorporado.","Senior engineer bij Nerdy Production met Go, Flutter, Python en TypeScript — van backend tot scherm, met geautomatiseerd testen ingebouwd.",{"en":2144,"ru":2145,"es":2144,"nl":2144},"Maxim","Максим",{"en":2147,"ru":2148,"es":2149,"nl":2150},"Senior engineer at Nerdy Production working from backend to screen — Go, Flutter, Python and TypeScript, with the tests written as he goes.","Старший инженер Nerdy Production, работающий от бэкенда до экрана: Go, Flutter, Python и TypeScript — и тесты, которые пишутся по ходу дела.","Ingeniero senior en Nerdy Production, del backend a la pantalla: Go, Flutter, Python y TypeScript, con los tests escritos sobre la marcha.","Senior engineer bij Nerdy Production, van backend tot scherm — Go, Flutter, Python en TypeScript, met de tests die hij onderweg schrijft.","\u002Fteam\u002Fmax.webp",{"en":2153,"ru":2154,"es":2155,"nl":2156},"Senior Software Engineer","Старший инженер-программист","Ingeniero de software senior","Senior software engineer","senior",[41,18,51,106,155,13,150],"maxim",{"en":2161,"ru":2162,"es":2163,"nl":2164},"Backend and Flutter engineering with a testing focus","Бэкенд и Flutter с фокусом на тестирование","Ingeniería backend y Flutter con foco en testing","Backend- en Flutter-engineering met focus op testen","a-8Kx1i-PQXIGU92_Rimqr3bPEur6ZwMfPKQWr2uk4I",{"id":2167,"bio":2168,"expertise":2173,"extension":2034,"links":2215,"meta":2227,"metaDescription":2228,"name":2233,"ogDescription":2236,"photo":2241,"role":2242,"seniority":2247,"skills":2248,"slug":170,"specialization":2249,"stem":170,"__hash__":2254},"team_members\u002Fnixan.yaml",{"en":2169,"ru":2170,"es":2171,"nl":2172},"Ilya founded Nerdy Production and leads its engineering. He has been building software since 2010 and shipping production Flutter since 2018.\n\nBefore that he was CTO of QIWI, one of Russia's largest payment platforms, where he ran roughly 12 engineering teams spanning web products down to card processing, :term{slug=\"pci-dss\"} scope, and contactless payments — including building contactless card payments on Android via :term[Host Card Emulation]{slug=\"host-card-emulation\"} over ISO\u002FIEC 14443, with EMV Contactless (Visa PayWave) on top.\n\nHe was also a principal developer at Yandex, where he worked on Yandex.Auto — taking native Android deep into the vehicle, with heavy CAN-bus integration through a custom CAN shield — and a principal at Evotor, whose point-of-sale devices run on a forked :term{slug=\"aosp\"}, giving him a low-level view of Android most app developers never touch.\n\nToday he leads delivery on the agency's flagship apps — from the chart-heavy fintech UI of [ExtraETF](\u002Fportfolio\u002Fextraetf) to the fully custom design system of [Arcana](\u002Fportfolio\u002Farcana). He writes most of the essays on this blog and maintains the agency's open-source work, including the [dxpdf](\u002Fopen-source\u002Fdxpdf) DOCX-to-PDF engine.\n\nHe works across [Flutter](\u002Ftechnologies\u002Fflutter), native iOS and Android, [Go](\u002Ftechnologies\u002Fgo), [Rust](\u002Ftechnologies\u002Frust), [TypeScript](\u002Ftechnologies\u002Ftypescript), [Kotlin](\u002Ftechnologies\u002Fkotlin), [Kubernetes](\u002Ftechnologies\u002Fkubernetes), and [Docker](\u002Ftechnologies\u002Fdocker), with a focus on app architecture, cross-platform delivery, and building teams that ship.\n","Илья основал Nerdy Production и руководит инженерной командой. Он занимается разработкой с 2010 года и выпускает продакшн-приложения на Flutter с 2018-го.\n\nДо этого он был CTO QIWI — одной из крупнейших платёжных платформ России, — где руководил примерно 12 инженерными командами: от веб-продуктов до карточного процессинга, зоны :term{slug=\"pci-dss\"} и бесконтактных платежей, включая бесконтактную оплату картой на Android через :term[Host Card Emulation]{slug=\"host-card-emulation\"} поверх ISO\u002FIEC 14443, с платёжным протоколом EMV Contactless (Visa PayWave).\n\nОн также был принципал-разработчиком в Яндексе, где работал над Яндекс.Авто, уводя нативный Android глубоко в автомобиль, с серьёзной интеграцией по шине CAN через собственный CAN-шилд, и принципалом в Эвоторе, чьи кассовые устройства работают на форке :term{slug=\"aosp\"}, что дало ему низкоуровневый взгляд на Android, недоступный большинству прикладных разработчиков.\n\nСейчас он ведёт поставку флагманских приложений агентства — от насыщенного графиками финтех-интерфейса [ExtraETF](\u002Fportfolio\u002Fextraetf) до полностью кастомной дизайн-системы [Arcana](\u002Fportfolio\u002Farcana). Он пишет большую часть материалов этого блога и поддерживает open-source агентства, включая движок [dxpdf](\u002Fopen-source\u002Fdxpdf) для конвертации DOCX в PDF.\n\nРаботает с [Flutter](\u002Ftechnologies\u002Fflutter), нативными iOS и Android, [Go](\u002Ftechnologies\u002Fgo), [Rust](\u002Ftechnologies\u002Frust), [TypeScript](\u002Ftechnologies\u002Ftypescript), [Kotlin](\u002Ftechnologies\u002Fkotlin), [Kubernetes](\u002Ftechnologies\u002Fkubernetes) и [Docker](\u002Ftechnologies\u002Fdocker); его фокус — архитектура приложений, кросс-платформенная поставка и построение команд, которые доводят продукт до релиза.\n","Ilya fundó Nerdy Production y dirige su ingeniería. Lleva construyendo software desde 2010 y entregando Flutter en producción desde 2018.\n\nAntes fue CTO de QIWI, una de las mayores plataformas de pago de Rusia, donde dirigió alrededor de 12 equipos de ingeniería que abarcaban desde productos web hasta procesamiento de tarjetas, alcance :term{slug=\"pci-dss\"} y pagos contactless, incluida la construcción de pagos contactless con tarjeta en Android mediante :term[Host Card Emulation]{slug=\"host-card-emulation\"} sobre ISO\u002FIEC 14443, con EMV Contactless (Visa PayWave) por encima.\n\nTambién fue principal developer en Yandex, donde trabajó en Yandex.Auto —llevando Android nativo hasta el interior del vehículo, con una integración intensiva por bus CAN a través de un CAN shield propio— y principal en Evotor, cuyos terminales de punto de venta funcionan sobre un fork de :term{slug=\"aosp\"}, lo que le dio una visión de bajo nivel de Android que la mayoría de desarrolladores de apps nunca llega a tocar.\n\nHoy lidera la entrega de las apps insignia de la agencia, desde la interfaz fintech cargada de gráficos de [ExtraETF](\u002Fportfolio\u002Fextraetf) hasta el sistema de diseño totalmente a medida de [Arcana](\u002Fportfolio\u002Farcana). Escribe la mayoría de los artículos de este blog y mantiene el trabajo de código abierto de la agencia, incluido el motor de conversión de DOCX a PDF [dxpdf](\u002Fopen-source\u002Fdxpdf).\n\nTrabaja con [Flutter](\u002Ftechnologies\u002Fflutter), iOS y Android nativos, [Go](\u002Ftechnologies\u002Fgo), [Rust](\u002Ftechnologies\u002Frust), [TypeScript](\u002Ftechnologies\u002Ftypescript), [Kotlin](\u002Ftechnologies\u002Fkotlin), [Kubernetes](\u002Ftechnologies\u002Fkubernetes) y [Docker](\u002Ftechnologies\u002Fdocker), con foco en arquitectura de aplicaciones, entrega multiplataforma y la construcción de equipos que entregan.\n","Ilya richtte Nerdy Production op en leidt de engineering. Hij bouwt software sinds 2010 en levert sinds 2018 Flutter in productie.\n\nDaarvoor was hij CTO van QIWI, een van de grootste betaalplatforms van Rusland, waar hij zo'n 12 engineeringteams aanstuurde die reikten van webproducten tot kaartverwerking, :term{slug=\"pci-dss\"}-scope en contactloos betalen — waaronder het bouwen van contactloze kaartbetalingen op Android via :term[Host Card Emulation]{slug=\"host-card-emulation\"} over ISO\u002FIEC 14443, met EMV Contactless (Visa PayWave) daarbovenop.\n\nHij was ook principal developer bij Yandex, waar hij aan Yandex.Auto werkte — native Android diep de auto in brengen, met zware integratie over de CAN-bus via een eigen CAN-shield — en principal bij Evotor, waarvan de kassa-apparaten op een fork van :term{slug=\"aosp\"} draaien, wat hem een blik op Android op laag niveau gaf die de meeste app-ontwikkelaars nooit krijgen.\n\nVandaag leidt hij de oplevering van de vlaggenschipapps van het bureau — van de grafiekzware fintech-UI van [ExtraETF](\u002Fportfolio\u002Fextraetf) tot het volledig eigen designsysteem van [Arcana](\u002Fportfolio\u002Farcana). Hij schrijft de meeste artikelen op deze blog en onderhoudt het opensourcewerk van het bureau, waaronder de DOCX-naar-PDF-motor [dxpdf](\u002Fopen-source\u002Fdxpdf).\n\nHij werkt met [Flutter](\u002Ftechnologies\u002Fflutter), native iOS en Android, [Go](\u002Ftechnologies\u002Fgo), [Rust](\u002Ftechnologies\u002Frust), [TypeScript](\u002Ftechnologies\u002Ftypescript), [Kotlin](\u002Ftechnologies\u002Fkotlin), [Kubernetes](\u002Ftechnologies\u002Fkubernetes) en [Docker](\u002Ftechnologies\u002Fdocker), met de nadruk op applicatiearchitectuur, cross-platform oplevering en het bouwen van teams die opleveren.\n",[2174,2179,2184,2189,2194,2199,2204,2209,2211,2213],{"en":2175,"ru":2176,"es":2177,"nl":2178},"iOS development","Разработка под iOS","Desarrollo iOS","iOS-ontwikkeling",{"en":2180,"ru":2181,"es":2182,"nl":2183},"Software architecture","Архитектура ПО","Arquitectura de software","Softwarearchitectuur",{"en":2185,"ru":2186,"es":2187,"nl":2188},"Engineering team leadership","Руководство инженерными командами","Liderazgo de equipos de ingeniería","Leidinggeven aan engineeringteams",{"en":2190,"ru":2191,"es":2192,"nl":2193},"Payment systems","Платёжные системы","Sistemas de pago","Betaalsystemen",{"en":2195,"ru":2196,"es":2197,"nl":2198},"Card processing","Карточный процессинг","Procesamiento de tarjetas","Kaartverwerking",{"en":2200,"ru":2201,"es":2202,"nl":2203},"PCI-DSS compliance","Соответствие PCI-DSS","Cumplimiento de PCI-DSS","Naleving van PCI-DSS",{"en":2205,"ru":2206,"es":2207,"nl":2208},"NFC and contactless payments","NFC и бесконтактные платежи","NFC y pagos contactless","NFC en contactloos betalen",{"en":2210,"ru":2210,"es":2210,"nl":2210},"Host Card Emulation",{"en":2212,"ru":2212,"es":2212,"nl":2212},"EMV Contactless",{"en":2214,"ru":2214,"es":2214,"nl":2214},"AOSP",[2216,2219,2222,2225],{"type":2217,"url":2218},"github","https:\u002F\u002Fgithub.com\u002Fthenixan",{"type":2220,"url":2221},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fthenixan\u002F",{"type":2223,"url":2224},"telegram","https:\u002F\u002Ft.me\u002Fthenixan",{"type":2037,"address":2226},"nixan@nerdy.pro",{},{"en":2229,"ru":2230,"es":2231,"nl":2232},"Founder and lead developer at Nerdy Production, former CTO of QIWI. Flutter architecture, payments infrastructure, and engineering teams that ship.","Основатель и ведущий разработчик Nerdy Production, экс-CTO QIWI. Архитектура на Flutter, платёжная инфраструктура и команды, которые доводят до релиза.","Fundador y lead developer en Nerdy Production, ex-CTO de QIWI. Arquitectura Flutter, infraestructura de pagos y equipos de ingeniería que entregan.","Oprichter en lead developer bij Nerdy Production, oud-CTO van QIWI. Flutter-architectuur, betaalinfrastructuur en teams die opleveren.",{"en":2234,"ru":2235,"es":2234,"nl":2234},"Ilya Nixan","Илья Никсан",{"en":2237,"ru":2238,"es":2239,"nl":2240},"Founder and lead developer at Nerdy Production, former CTO of QIWI — Flutter architecture, payments infrastructure, and teams that ship.","Основатель и ведущий разработчик Nerdy Production, экс-CTO QIWI: архитектура на Flutter, платёжная инфраструктура и команды, которые доводят до релиза.","Fundador y lead developer en Nerdy Production, ex-CTO de QIWI: arquitectura Flutter, infraestructura de pagos y equipos que entregan.","Oprichter en lead developer bij Nerdy Production, oud-CTO van QIWI — Flutter-architectuur, betaalinfrastructuur en teams die opleveren.","\u002Fteam\u002Fnixan.webp",{"en":2243,"ru":2244,"es":2245,"nl":2246},"Founder & Lead Developer","Основатель и ведущий разработчик","Fundador y lead developer","Oprichter & lead developer","founder_lead",[41,18,71,141,76,146,51,126,121,155,160,90,13,150,136,7,29,80],{"en":2250,"ru":2251,"es":2252,"nl":2253},"Flutter architecture and leading delivery teams","Архитектура на Flutter и руководство командами поставки","Arquitectura Flutter y liderazgo de equipos de entrega","Flutter-architectuur en het leiden van opleverteams","BmeQZ7JyhRFIx8527WO2t1-WklP8AAvevAxiN9U4TEs",{"id":2256,"bio":2257,"expertise":2262,"extension":2034,"links":2274,"meta":2279,"metaDescription":2280,"name":2285,"ogDescription":2288,"photo":2293,"role":2294,"seniority":2157,"skills":2299,"slug":2300,"specialization":2301,"stem":2300,"__hash__":2306},"team_members\u002Froma.yaml",{"en":2258,"ru":2259,"es":2260,"nl":2261},"Roman works across native iOS and Android and [Flutter](\u002Ftechnologies\u002Fflutter), and pairs that mobile depth with [Python](\u002Ftechnologies\u002Fpython) and applied AI.\n\nMuch of his background is in ERP and CRM development — complex, data-heavy business systems where getting the domain model right matters more than the UI — which gives him a pragmatic eye for how an app fits the process behind it.\n","Роман работает с нативными iOS и Android и с [Flutter](\u002Ftechnologies\u002Fflutter), дополняя мобильную экспертизу [Python](\u002Ftechnologies\u002Fpython) и прикладным AI.\n\nЗначительная часть его опыта — разработка ERP и CRM, сложных систем с большим объёмом данных, где правильная доменная модель важнее интерфейса, — что даёт ему прагматичный взгляд на то, как приложение встраивается в процесс за ним.\n","Roman trabaja con iOS y Android nativos y con [Flutter](\u002Ftechnologies\u002Fflutter), y combina esa profundidad móvil con [Python](\u002Ftechnologies\u002Fpython) e IA aplicada.\n\nBuena parte de su trayectoria está en el desarrollo de ERP y CRM —sistemas de negocio complejos y con mucho dato, donde acertar con el modelo de dominio importa más que la interfaz—, lo que le da una mirada pragmática sobre cómo encaja una app en el proceso que hay detrás.\n","Roman werkt met native iOS en Android en met [Flutter](\u002Ftechnologies\u002Fflutter), en combineert die mobiele diepgang met [Python](\u002Ftechnologies\u002Fpython) en toegepaste AI.\n\nEen groot deel van zijn achtergrond ligt in ERP- en CRM-ontwikkeling — complexe, datazware bedrijfssystemen waarin het domeinmodel goed krijgen zwaarder weegt dan de interface — wat hem een pragmatische blik geeft op hoe een app in het proces erachter past.\n",[2263,2264,2269],{"en":2175,"ru":2176,"es":2177,"nl":2178},{"en":2265,"ru":2266,"es":2267,"nl":2268},"Applied AI","Прикладной AI","IA aplicada","Toegepaste AI",{"en":2270,"ru":2271,"es":2272,"nl":2273},"ERP and CRM systems","ERP- и CRM-системы","Sistemas ERP y CRM","ERP- en CRM-systemen",[2275,2277],{"type":2220,"url":2276},"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fromanbatler\u002F",{"type":2037,"address":2278},"roma@nerdy.pro",{},{"en":2281,"ru":2282,"es":2283,"nl":2284},"Senior mobile developer at Nerdy Production — native iOS and Android, Flutter, applied AI, and a background in data-heavy ERP and CRM systems.","Старший мобильный разработчик Nerdy Production: нативные iOS и Android, Flutter, прикладной AI и опыт в ERP- и CRM-системах.","Desarrollador móvil senior en Nerdy Production: iOS y Android nativos, Flutter, IA aplicada y experiencia en sistemas ERP y CRM con gran volumen de datos.","Senior mobiele developer bij Nerdy Production — native iOS en Android, Flutter, toegepaste AI, en een achtergrond in datazware ERP- en CRM-systemen.",{"en":2286,"ru":2287,"es":2286,"nl":2286},"Roman","Рома",{"en":2289,"ru":2290,"es":2291,"nl":2292},"Senior mobile developer at Nerdy Production — native iOS and Android, Flutter, applied AI, and years of data-heavy ERP and CRM behind him.","Старший мобильный разработчик Nerdy Production: нативные iOS и Android, Flutter, прикладной AI и годы работы с нагруженными ERP и CRM.","Desarrollador móvil senior en Nerdy Production: iOS y Android nativos, Flutter, IA aplicada y años de ERP y CRM con mucha carga de datos.","Senior mobiele developer bij Nerdy Production — native iOS en Android, Flutter, toegepaste AI, en jaren datazware ERP en CRM achter zich.","\u002Fteam\u002Froma.webp",{"en":2295,"ru":2296,"es":2297,"nl":2298},"Senior Mobile Developer","Старший мобильный разработчик","Desarrollador móvil senior","Senior mobiele developer",[7,41,18,141,146,106],"roma",{"en":2302,"ru":2303,"es":2304,"nl":2305},"Mobile, AI, and ERP\u002FCRM systems","Мобильная разработка, AI и системы ERP\u002FCRM","Móvil, IA y sistemas ERP\u002FCRM","Mobiel, AI en ERP\u002FCRM-systemen","caPSPO2BX35G9lEjNb6p3U4uF_V7yh8cexCe6l5hm8Y",{"id":2308,"bio":2309,"expertise":2314,"extension":2034,"links":2086,"meta":2325,"metaDescription":2326,"name":2331,"ogDescription":2334,"photo":2339,"role":2340,"seniority":2157,"skills":2345,"slug":2346,"specialization":2347,"stem":2346,"__hash__":2352},"team_members\u002Fxsox.yaml",{"en":2310,"ru":2311,"es":2312,"nl":2313},"Eugene builds the systems that apps depend on. His background is in backend engineering — designing and running the APIs, data models, and services behind a product, primarily in [Python](\u002Ftechnologies\u002Fpython) and [Django](\u002Ftechnologies\u002Fdjango).\n\nHe also works in [Flutter](\u002Ftechnologies\u002Fflutter), so he can reason about a feature from the database to the device and build the backend so the app that consumes it stays simple.\n","Женя строит системы, на которые опираются приложения. Его основной опыт — бэкенд-инженерия: проектирование и эксплуатация API, моделей данных и сервисов за продуктом, в первую очередь на [Python](\u002Ftechnologies\u002Fpython) и [Django](\u002Ftechnologies\u002Fdjango).\n\nОн также работает с [Flutter](\u002Ftechnologies\u002Fflutter), поэтому может рассуждать о фиче от базы данных до устройства и строить бэкенд так, чтобы потребляющее его приложение оставалось простым.\n","Eugene construye los sistemas de los que dependen las apps. Su trayectoria está en la ingeniería backend: diseñar y operar las APIs, los modelos de datos y los servicios que hay detrás de un producto, principalmente en [Python](\u002Ftechnologies\u002Fpython) y [Django](\u002Ftechnologies\u002Fdjango).\n\nTambién trabaja con [Flutter](\u002Ftechnologies\u002Fflutter), así que puede razonar sobre una funcionalidad desde la base de datos hasta el dispositivo y construir el backend de forma que la app que lo consume siga siendo simple.\n","Eugene bouwt de systemen waar apps op leunen. Zijn achtergrond ligt in backend-engineering: de API's, datamodellen en services achter een product ontwerpen en draaien, vooral in [Python](\u002Ftechnologies\u002Fpython) en [Django](\u002Ftechnologies\u002Fdjango).\n\nHij werkt daarnaast met [Flutter](\u002Ftechnologies\u002Fflutter), zodat hij over een functie kan nadenken van de database tot het toestel en de backend zo kan bouwen dat de app die hem verbruikt eenvoudig blijft.\n",[2315,2320],{"en":2316,"ru":2317,"es":2318,"nl":2319},"API design","Проектирование API","Diseño de APIs","API-ontwerp",{"en":2321,"ru":2322,"es":2323,"nl":2324},"Data modelling","Моделирование данных","Modelado de datos","Datamodellering",{},{"en":2327,"ru":2328,"es":2329,"nl":2330},"Senior backend developer at Nerdy Production building the APIs, data models and services behind our apps, primarily in Python and Django.","Старший бэкенд-разработчик Nerdy Production: API, модели данных и сервисы за нашими приложениями, в первую очередь на Python и Django.","Desarrollador backend senior en Nerdy Production: las APIs, modelos de datos y servicios detrás de nuestras apps, sobre todo en Python y Django.","Senior backenddeveloper bij Nerdy Production die de API's, datamodellen en services achter onze apps bouwt, vooral in Python en Django.",{"en":2332,"ru":2333,"es":2332,"nl":2332},"Eugene Xsox","Женя Xsox",{"en":2335,"ru":2336,"es":2337,"nl":2338},"Senior backend developer at Nerdy Production — the APIs, data models and services our apps run on, mostly in Python and Django.","Старший бэкенд-разработчик Nerdy Production: API, модели данных и сервисы, на которых работают наши приложения, в основном на Python и Django.","Desarrollador backend senior en Nerdy Production: las APIs, modelos de datos y servicios sobre los que corren nuestras apps, en Python y Django.","Senior backenddeveloper bij Nerdy Production — de API's, datamodellen en services waarop onze apps draaien, vooral in Python en Django.","\u002Fteam\u002Fxsox.webp",{"en":2341,"ru":2342,"es":2343,"nl":2344},"Senior Backend Developer","Старший бэкенд-разработчик","Desarrollador backend senior","Senior backenddeveloper",[106,24,41,18,155,160,90,150],"xsox",{"en":2348,"ru":2349,"es":2350,"nl":2351},"Python\u002FDjango backends, plus Flutter","Бэкенды на Python\u002FDjango и Flutter","Backends en Python\u002FDjango, además de Flutter","Backends in Python\u002FDjango, plus Flutter","w_QAKKq_Mh_dtMvAxFpAJBC10PW1I7zgVOxELwRHwO8",[2354,2362,2369,2374,2384],{"id":2355,"extension":2034,"meta":2356,"name":2357,"slug":2007,"stem":2007,"__hash__":2361},"blog_topics\u002Fcybersecurity.yaml",{},{"en":2358,"ru":2359,"es":2360,"nl":2358},"Cybersecurity","Кибербезопасность","Ciberseguridad","kt1rdsMy5W4b9MvGHm6mZVCr0inHidEuqaosPYmmk4E",{"id":2363,"extension":2034,"meta":2364,"name":2365,"slug":2367,"stem":2367,"__hash__":2368},"blog_topics\u002Fdevops.yaml",{},{"en":2366,"ru":2366,"es":2366,"nl":2366},"DevOps","devops","D3mxlZuFHKCGeszKZuWCiQmHmP5EiCvzg1qEAIQhnyU",{"id":2370,"extension":2034,"meta":2371,"name":2372,"slug":41,"stem":41,"__hash__":2373},"blog_topics\u002Fflutter.yaml",{},{"en":39,"ru":39,"es":39,"nl":39},"OOeALAmwFuEqByuJvTGk4g15FIHENPfYMdpfZh_HTAE",{"id":2375,"extension":2034,"meta":2376,"name":2377,"slug":2382,"stem":2382,"__hash__":2383},"blog_topics\u002Ffor-founders.yaml",{},{"en":2378,"ru":2379,"es":2380,"nl":2381},"For Founders","Для основателей","Para fundadores","Voor oprichters","for-founders","lp2u6Ol2qF4DGxpB83HxbbGzWioT-e40mJhD4lr28-U",{"id":2385,"extension":2034,"meta":2386,"name":2387,"slug":2392,"stem":2392,"__hash__":2393},"blog_topics\u002Fsoftware-engineering.yaml",{},{"en":2388,"ru":2389,"es":2390,"nl":2391},"Software Engineering","Разработка ПО","Ingeniería de software","Software-engineering","software-engineering","aZMb3aUDptoFQk_cEE6l5H4wrYcgZuBYUubmKqOAaaU",{"data":2395,"body":2396},{},{"type":2397,"children":2398},"root",[2399,2405,2422,2433,2461],{"type":2400,"tag":175,"props":2401,"children":2402},"element",{},[2403],{"type":1350,"value":2404},"Ilya richtte Nerdy Production op en leidt de engineering. Hij bouwt software sinds 2010 en levert sinds 2018 Flutter in productie.",{"type":2400,"tag":175,"props":2406,"children":2407},{},[2408,2410,2413,2415,2420],{"type":1350,"value":2409},"Daarvoor was hij CTO van QIWI, een van de grootste betaalplatforms van Rusland, waar hij zo'n 12 engineeringteams aanstuurde die reikten van webproducten tot kaartverwerking, ",{"type":2400,"tag":179,"props":2411,"children":2412},{"slug":275},[],{"type":1350,"value":2414},"-scope en contactloos betalen — waaronder het bouwen van contactloze kaartbetalingen op Android via ",{"type":2400,"tag":179,"props":2416,"children":2418},{"slug":2417},"host-card-emulation",[2419],{"type":1350,"value":2210},{"type":1350,"value":2421}," over ISO\u002FIEC 14443, met EMV Contactless (Visa PayWave) daarbovenop.",{"type":2400,"tag":175,"props":2423,"children":2424},{},[2425,2427,2431],{"type":1350,"value":2426},"Hij was ook principal developer bij Yandex, waar hij aan Yandex.Auto werkte — native Android diep de auto in brengen, met zware integratie over de CAN-bus via een eigen CAN-shield — en principal bij Evotor, waarvan de kassa-apparaten op een fork van ",{"type":2400,"tag":179,"props":2428,"children":2430},{"slug":2429},"aosp",[],{"type":1350,"value":2432}," draaien, wat hem een blik op Android op laag niveau gaf die de meeste app-ontwikkelaars nooit krijgen.",{"type":2400,"tag":175,"props":2434,"children":2435},{},[2436,2438,2444,2446,2452,2454,2460],{"type":1350,"value":2437},"Vandaag leidt hij de oplevering van de vlaggenschipapps van het bureau — van de grafiekzware fintech-UI van ",{"type":2400,"tag":1360,"props":2439,"children":2441},{"href":2440},"\u002Fportfolio\u002Fextraetf",[2442],{"type":1350,"value":2443},"ExtraETF",{"type":1350,"value":2445}," tot het volledig eigen designsysteem van ",{"type":2400,"tag":1360,"props":2447,"children":2449},{"href":2448},"\u002Fportfolio\u002Farcana",[2450],{"type":1350,"value":2451},"Arcana",{"type":1350,"value":2453},". Hij schrijft de meeste artikelen op deze blog en onderhoudt het opensourcewerk van het bureau, waaronder de DOCX-naar-PDF-motor ",{"type":2400,"tag":1360,"props":2455,"children":2457},{"href":2456},"\u002Fopen-source\u002Fdxpdf",[2458],{"type":1350,"value":2459},"dxpdf",{"type":1350,"value":259},{"type":2400,"tag":175,"props":2462,"children":2463},{},[2464,2466,2471,2473,2478,2480,2485,2486,2491,2492,2497,2498,2503,2504,2509],{"type":1350,"value":2465},"Hij werkt met ",{"type":2400,"tag":1360,"props":2467,"children":2469},{"href":2468},"\u002Ftechnologies\u002Fflutter",[2470],{"type":1350,"value":39},{"type":1350,"value":2472},", native iOS en Android, ",{"type":2400,"tag":1360,"props":2474,"children":2476},{"href":2475},"\u002Ftechnologies\u002Fgo",[2477],{"type":1350,"value":49},{"type":1350,"value":2479},", ",{"type":2400,"tag":1360,"props":2481,"children":2483},{"href":2482},"\u002Ftechnologies\u002Frust",[2484],{"type":1350,"value":124},{"type":1350,"value":2479},{"type":2400,"tag":1360,"props":2487,"children":2489},{"href":2488},"\u002Ftechnologies\u002Ftypescript",[2490],{"type":1350,"value":153},{"type":1350,"value":2479},{"type":2400,"tag":1360,"props":2493,"children":2495},{"href":2494},"\u002Ftechnologies\u002Fkotlin",[2496],{"type":1350,"value":69},{"type":1350,"value":2479},{"type":2400,"tag":1360,"props":2499,"children":2501},{"href":2500},"\u002Ftechnologies\u002Fkubernetes",[2502],{"type":1350,"value":78},{"type":1350,"value":919},{"type":2400,"tag":1360,"props":2505,"children":2507},{"href":2506},"\u002Ftechnologies\u002Fdocker",[2508],{"type":1350,"value":27},{"type":1350,"value":2510},", met de nadruk op applicatiearchitectuur, cross-platform oplevering en het bouwen van teams die opleveren.",[2512,2524,2544,2557,2571,2585,2599,2616,2629,2644,2658,2671,2682,2696,2712,2722,2735,2746,2756,2769,2779,2790,2805,2814,2826,2840,2847,2859,2872,2883,2898,2911,2923,2936,2949,2962,2975,2986,2997,3009,3020,3032,3042,3054,3067,3079,3090,3104,3115,3127,3140,3149,3161],{"slug":2429,"term":2214,"definition":2513,"category":2514,"aliases":2515,"links":2517,"related":2521,"readMore":-1,"target":2522,"hasArticle":2523},"Het Android Open Source Project — Android zonder de Google-laag erbovenop, door iedereen vrij te forken. Kassaterminals, kiosken en autosystemen draaien op forks ervan, en werken op dat niveau legt delen van het OS bloot die een app-ontwikkelaar nooit ziet.","platform",[2516],"Android Open Source Project",[2518],{"kind":2519,"url":2520},"website","https:\u002F\u002Fsource.android.com\u002F",[2417],"\u002Fglossary#aosp",false,{"slug":2525,"term":2526,"definition":2527,"category":2528,"aliases":2529,"links":2534,"related":2540,"readMore":-1,"target":2543,"hasArticle":2523},"gdpr","AVG","De EU-verordening over persoonsgegevens van mensen in de EU: een rechtsgrond om ze te verzamelen, echte toestemming voor tracking, en het recht om ze in te zien en te laten wissen. Ze volgt je gebruikers, niet je servers, en geldt dus ongeacht waar het bedrijf staat ingeschreven.","practice",[2530,2531,2532,2533],"GDPR","General Data Protection Regulation","Algemene verordening gegevensbescherming","gegevensbescherming",[2535,2537],{"kind":2519,"url":2536},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":2538,"url":2539},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[275,2541,2542],"soc-2","hipaa","\u002Fglossary#gdpr",{"slug":2545,"term":2546,"definition":2547,"category":2514,"aliases":2548,"links":2549,"related":2553,"readMore":-1,"target":2556,"hasArticle":2523},"app-clips","App Clips","Een Apple-functie die een klein stuk van een iOS-app draait — onder de 15 MB — zonder het geheel te installeren. Te starten via een QR-code, een NFC-tag of een link, voor als de eerste handeling van een gebruiker niet eerst een gang naar de App Store zou moeten vergen.",[],[2550],{"kind":2551,"url":2552},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[2554,2555],"deep-linking","install-referrer","\u002Fglossary#app-clips",{"slug":2558,"term":2559,"definition":2560,"category":2514,"aliases":2561,"links":2562,"related":2567,"readMore":-1,"target":2570,"hasArticle":2523},"bigquery","BigQuery","Het analytische datawarehouse van Google Cloud. Je laat SQL los op miljarden rijen en het scant ze in seconden, op opslag die losstaat van de machines die de query uitvoeren — en juist dat houdt rapportage en verkenning weg bij de database die het live verkeer bedient.",[],[2563,2565],{"kind":2519,"url":2564},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":2538,"url":2566},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[2568,2569],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":2572,"term":2573,"definition":2574,"category":2528,"aliases":2575,"links":2580,"related":2583,"readMore":-1,"target":2584,"hasArticle":2523},"ci-cd","CI\u002FCD","Automatisering die elke wijziging bouwt, test en uitlevert zonder dat iemand handmatig commando's uitvoert. Op mobiel is het wat van een release een druk op de knop maakt in plaats van een middag wachten tot iemand anders tijd heeft.",[2576,2577,2578,2579],"CI","continuous integration","continuous delivery","continue integratie",[2581],{"kind":2538,"url":2582},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":2586,"term":2587,"definition":2588,"category":2589,"aliases":2590,"links":2592,"related":2595,"readMore":-1,"target":2598,"hasArticle":2523},"crud","CRUD","Create, read, update, delete — de vier bewerkingen achter zo goed als elk formulier en elk beheerscherm. Verzamelnaam voor de helft van een app die routinematig gegevensbeheer is, tegenover de delen die echte domeinlogica dragen.","architecture",[2591],"Create, Read, Update, Delete",[2593],{"kind":2538,"url":2594},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[2596,2597],"rest","graphql","\u002Fglossary#crud",{"slug":2600,"term":2601,"definition":2602,"category":2589,"aliases":2603,"links":2609,"related":2612,"readMore":-1,"target":2615,"hasArticle":2523},"container-registry","Containerregistry","Een gehoste opslagplaats voor container-images, aangesproken op naam en tag — Docker Hub, GitHub Container Registry, of die van je eigen cloudprovider. Een build daarheen pushen verandert 'werkt op mijn machine' in een image die iedereen ongewijzigd kan pullen en draaien.",[2604,2605,2606,2607,2608],"container registry","image registry","Docker registry","GHCR","ghcr.io",[2610],{"kind":2551,"url":2611},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[2613,2614],"dev-container","multi-arch-image","\u002Fglossary#container-registry",{"slug":2554,"term":2617,"definition":2618,"category":2514,"aliases":2619,"links":2624,"related":2627,"readMore":2628,"target":2628,"hasArticle":451},"Deep linking","Een link die een specifiek scherm in een geïnstalleerde app opent in plaats van het beginscherm of een webpagina. Deferred deep linking overleeft een installatie, zodat een tik die via de appwinkel loopt alsnog op het juiste scherm landt.",[2620,2621,2622,2623],"deferred deep linking","universal links","Android App Links","diepe links",[2625],{"kind":2538,"url":2626},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[2545,2555],"\u002Fglossary\u002Fdeep-linking",{"slug":2613,"term":2630,"definition":2631,"category":2528,"aliases":2632,"links":2637,"related":2642,"readMore":-1,"target":2643,"hasArticle":2523},"Dev Container","Een ontwikkelomgeving die één keer beschreven staat in devcontainer.json — het OS, de tools en de runtimeversies die een project nodig heeft — en die bij iedere bijdrager identiek in een container opent, in plaats van een installatiehandleiding die iedereen anders leest.",[2633,2634,2635,2636],"devcontainer.json","Dev Containers","VS Code Dev Containers","ontwikkelcontainer",[2638,2640],{"kind":2519,"url":2639},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":2551,"url":2641},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[2600],"\u002Fglossary#dev-container",{"slug":2645,"term":2646,"definition":2647,"category":2589,"aliases":2648,"links":2653,"related":2656,"readMore":-1,"target":2657,"hasArticle":2523},"floating-point","Drijvende komma","Het binaire IEEE 754-formaat achter double en float. Het kan 0,1 niet exact weergeven, dus 0.1 + 0.2 is 0.30000000000000004 — onzichtbaar in graphics en fataal bij geld, dat thuishoort in gehele kleinste eenheden (centen) of een decimaal type.",[2649,2650,2651,2652],"IEEE 754","double","floating point","zwevende komma",[2654],{"kind":2538,"url":2655},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point",{"slug":2569,"term":2659,"definition":2660,"category":2514,"aliases":2661,"links":2664,"related":2669,"readMore":-1,"target":2670,"hasArticle":2523},"Elasticsearch","Een zoek- en analysemachine die records indexeert zodat je ze interactief kunt filteren en doorzoeken in plaats van ze te scannen. Waar je naar grijpt als de vraag 'laat me deze specifieke sessies zien, op zes manieren ingeperkt' is en niet 'tel deze kolom op'.",[2662,2663],"Elastic","ELK",[2665,2667],{"kind":2519,"url":2666},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":2538,"url":2668},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[2558],"\u002Fglossary#elasticsearch",{"slug":181,"term":1864,"definition":2672,"category":2589,"aliases":2673,"links":2677,"related":2680,"readMore":-1,"target":2681,"hasArticle":2523},"Versleuteling die op het verzendende apparaat wordt aangebracht en pas op het ontvangende weer wordt weggehaald, zodat de dienst die het bericht vervoert het niet kan lezen — niet na een vordering, niet na een datalek. Het beschermt de inhoud, nooit de metadata.",[2674,2675,2676],"E2EE","end-to-end encryption","end-to-end versleuteld",[2678],{"kind":2538,"url":2679},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[257,1110],"\u002Fglossary#end-to-end-encryption",{"slug":2683,"term":2684,"definition":2685,"category":2589,"aliases":2686,"links":2690,"related":2691,"readMore":-1,"target":2695,"hasArticle":2523},"fan-out","Fan-out","Eén keer uit een bron lezen en elke update afleveren bij iedere client die erop geabonneerd is. De naïeve versie schrijft in een lus naar abonnees en loopt vast zodra één socket traag is; een echte buffert per client en laat vallen wie niet kan bijbenen.",[2687,2688,2689],"fanout","broadcast","uitzending",[],[2692,2693,2694],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":2697,"term":2698,"definition":2699,"category":2528,"aliases":2700,"links":2704,"related":2707,"readMore":-1,"target":2711,"hasArticle":2523},"feature-flags","Feature flags","Schakelaars die functionaliteit aan- of uitzetten vanuit configuratie in plaats van vanuit een release. Ze laten één binary zich per merk, markt of gebruiker anders gedragen, en laten je een riskante functie uitzetten zonder een nieuwe build door de review te sturen.",[2701,2702,2703],"feature flag","feature toggle","functieschakelaar",[2705],{"kind":2538,"url":2706},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[2708,2709,2710],"staged-rollout","white-label","multi-tenancy","\u002Fglossary#feature-flags",{"slug":2708,"term":2713,"definition":2714,"category":2528,"aliases":2715,"links":2719,"related":2720,"readMore":-1,"target":2721,"hasArticle":2523},"Gefaseerde uitrol","Een build eerst naar een klein percentage gebruikers uitbrengen en pas verbreden als het crashvrije percentage standhoudt. Een slechte build die je bij tien procent betrapt is een slechte middag; dezelfde build bij honderd procent is een slechte week.",[2716,2717,2718],"staged rollout","gefaseerde release","canary release",[],[2697,2572],"\u002Fglossary#staged-rollout",{"slug":2723,"term":2724,"definition":2725,"category":2528,"aliases":2726,"links":2730,"related":2733,"readMore":-1,"target":2734,"hasArticle":2523},"golden-test","Golden test","Een test die een widget rendert en het resultaat pixel voor pixel vergelijkt met een opgeslagen referentiebeeld. In Flutter is het de goedkoopste manier om te zien of een herontwerp de empty state brak op 320pt, in donkere modus, bij 200% tekstgrootte.",[2727,2728,2729],"golden tests","screenshottest","snapshottest",[2731],{"kind":2551,"url":2732},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[2572],"\u002Fglossary#golden-test",{"slug":2597,"term":2736,"definition":2737,"category":2589,"aliases":2738,"links":2739,"related":2744,"readMore":-1,"target":2745,"hasArticle":2523},"GraphQL","Een querytaal voor API's waarin de client precies de velden benoemt die hij wil en één antwoord terugkrijgt dat daarop past. Het haalt de over-fetching weg waar REST-endpoints naar afglijden, en voegt er een eigen faalmodus aan toe: een onbegrensde query die het hele datamodel afloopt.",[],[2740,2742],{"kind":2519,"url":2741},"https:\u002F\u002Fgraphql.org\u002F",{"kind":2538,"url":2743},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[2596],"\u002Fglossary#graphql",{"slug":2542,"term":2747,"definition":2748,"category":2528,"aliases":2749,"links":2751,"related":2754,"readMore":-1,"target":2755,"hasArticle":2523},"HIPAA","De Amerikaanse wet over beschermde gezondheidsinformatie — hoe die opgeslagen, verstuurd, gelogd en gedeeld mag worden. Net als PCI-DSS is het een architectuurkeuze aan het begin, geen beleidsstuk dat je vlak voor de lancering toevoegt.",[2750],"Health Insurance Portability and Accountability Act",[2752],{"kind":2538,"url":2753},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[275,2525,2541],"\u002Fglossary#hipaa",{"slug":2757,"term":2758,"definition":2759,"category":2589,"aliases":2760,"links":2763,"related":2766,"readMore":-1,"target":2768,"hasArticle":2523},"headless-cms","Headless CMS","Een contentsysteem met een redactieomgeving en een API, maar zonder eigen front-end. Redacteuren publiceren op één plek, en de site of app rendert die content zelf — zodat de presentatielaag van jou is en niet van de CMS-leverancier.",[2761,2762],"headless contentmanagementsysteem","content-API",[2764],{"kind":2538,"url":2765},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[2767,2596],"server-side-rendering","\u002Fglossary#headless-cms",{"slug":2417,"term":2210,"definition":2770,"category":2514,"aliases":2771,"links":2774,"related":2777,"readMore":-1,"target":2778,"hasArticle":2523},"Een Android-telefoon zich in software laten gedragen als een contactloze kaart via NFC, zonder secure element in hardware. Zo betaalt een wallet-app bij een terminal: de telefoon spreekt hetzelfde contactloze EMV-protocol als de plastic kaart zou hebben gedaan.",[2772,2212,2773],"HCE","contactloos betalen",[2775],{"kind":2551,"url":2776},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[275,2429],"\u002Fglossary#host-card-emulation",{"slug":2780,"term":2781,"definition":2782,"category":2514,"aliases":2783,"links":2784,"related":2787,"readMore":-1,"target":2789,"hasArticle":2523},"impeller","Impeller","De renderengine die Flutter vandaag gebruikt, standaard op iOS sinds 2023 en op Android sinds 2024. Hij compileert zijn shaders vooraf in plaats van tijdens de eerste animatie, wat de shader-jank wegnam die Flutters zichtbaarste productieprobleem was.",[],[2785],{"kind":2551,"url":2786},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[2788],"skia","\u002Fglossary#impeller",{"slug":2791,"term":2792,"definition":2793,"category":2794,"aliases":2795,"links":2799,"related":2802,"readMore":-1,"target":2804,"hasArticle":2523},"in-app-purchase","In-app-aankoop","Digitale goederen of een abonnement verkopen via de Apple- of Google-billing die beide winkels verplicht stellen voor digitale content en waarover ze commissie rekenen. Het moeilijke is nooit de aankoop; het is het herstellen ervan op een nieuw toestel en de rechten kloppend houden.","business",[2796,2797,2798],"IAP","in-app purchase","in-app-abonnement",[2800],{"kind":2551,"url":2801},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[2803],"product-market-fit","\u002Fglossary#in-app-purchase",{"slug":2555,"term":2806,"definition":2807,"category":2514,"aliases":2808,"links":2809,"related":2812,"readMore":-1,"target":2813,"hasArticle":2523},"Install Referrer","Een Google Play-API die een net geïnstalleerde Android-app de campagneparameters overhandigt van de link die tot de installatie leidde. De Android-helft van deferred deep linking, en de betrouwbare manier om te weten waar een gebruiker vandaan kwam.",[],[2810],{"kind":2551,"url":2811},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[2554,2545],"\u002Fglossary#install-referrer",{"slug":1110,"term":2815,"definition":2816,"category":2817,"aliases":2818,"links":2820,"related":2824,"readMore":-1,"target":2825,"hasArticle":2523},"JWT","Een ondertekend token dat zijn eigen claims meedraagt, zodat een server kan zien bij wie een verzoek hoort zonder een sessie op te zoeken. Standaard voor mobiele authenticatie. De handtekening bewijst dat er niets is gewijzigd; ze verbergt niet wat erin staat.","protocol",[2819],"JSON Web Token",[2821,2822],{"kind":2519,"url":1362},{"kind":2538,"url":2823},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[275],"\u002Fglossary#jwt",{"slug":2827,"term":2828,"definition":2829,"category":2528,"aliases":2830,"links":2835,"related":2838,"readMore":-1,"target":2839,"hasArticle":2523},"kyc","KYC","Know Your Customer — de identiteitscontroles die een gereguleerd financieel product uitvoert voordat het iemand geld laat verplaatsen: documentscans, liveness, sanctie- en witwascontroles. Het bepaalt de onboarding sterker dan welke ontwerpkeuze ook.",[2831,2832,2833,2834],"Know Your Customer","AML","KYC\u002FAML","witwascontrole",[2836],{"kind":2538,"url":2837},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[275,2525],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":2841,"category":2514,"aliases":2842,"links":2844,"related":2845,"readMore":2846,"target":2846,"hasArticle":2523},"Bedrijfslogica geschreven in Kotlin delen tussen Android, iOS en de server, terwijl elk platform zijn eigen native UI houdt. Het alternatief voor Flutter wanneer de interface native moet zijn maar de regels erachter niet.",[2843],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":2848,"term":2849,"definition":2850,"category":2794,"aliases":2851,"links":2854,"related":2857,"readMore":-1,"target":2858,"hasArticle":2523},"mvp","MVP","De kleinste versie van een product die je aan echte gebruikers kunt uitbrengen en die nog steeds de vraag beantwoordt waarvoor je het bouwde. Een besluit over scope, niet over kwaliteit — een MVP moet nog altijd werken.",[2852,2853],"minimum viable product","minimaal levensvatbaar product",[2855],{"kind":2538,"url":2856},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[2709],"\u002Fglossary#mvp",{"slug":2614,"term":2860,"definition":2861,"category":2589,"aliases":2862,"links":2867,"related":2870,"readMore":-1,"target":2871,"hasArticle":2523},"Multi-architectuur-image","Eén image-tag die per CPU-architectuur naar andere binaries verwijst — linux\u002Famd64 en linux\u002Farm64 zijn het gebruikelijke paar — zodat dezelfde docker pull ongewijzigd werkt op Intel- en AMD-servers en op Apple Silicon-laptops.",[2863,2864,2865,2866],"multi-arch build","multi-arch image","multi-platform image","linux\u002Famd64 + linux\u002Farm64",[2868],{"kind":2551,"url":2869},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[2600],"\u002Fglossary#multi-arch-image",{"slug":2710,"term":2873,"definition":2874,"category":2589,"aliases":2875,"links":2878,"related":2881,"readMore":-1,"target":2882,"hasArticle":2523},"Multi-tenancy","Eén deployment die veel klanten bedient, waarbij elke klant alleen zijn eigen data, configuratie en ingeschakelde functies ziet doordat de tenantcontext per verzoek wordt bepaald. Het is wat een vloot merkapps één product maakt in plaats van veel forks.",[2876,2877],"multi-tenant","tenant",[2879],{"kind":2538,"url":2880},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[2709,2697],"\u002Fglossary#multi-tenancy",{"slug":2884,"term":2885,"definition":2886,"category":2817,"aliases":2887,"links":2891,"related":2896,"readMore":-1,"target":2897,"hasArticle":2523},"oauth","OAuth","De standaard achter Inloggen met Apple, Google en de rest: de gebruiker geeft je app toestemming bij een aanbieder die hij al vertrouwt, en je app krijgt een token in plaats van zijn wachtwoord. Niemand hoeft nieuwe inloggegevens te verzinnen en jij bewaart ze nergens.",[2888,2889,2890],"OAuth 2.0","social login","Inloggen met Apple",[2892,2894],{"kind":2519,"url":2893},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":2538,"url":2895},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[1110],"\u002Fglossary#oauth",{"slug":2568,"term":2899,"definition":2900,"category":2589,"aliases":2901,"links":2906,"related":2909,"readMore":-1,"target":2910,"hasArticle":2523},"Objectopslag","Opslag die een heel bestand onder een sleutel bewaart in plaats van in een mappenboom — Amazon S3 en de vele diensten die zijn API spreken. Goedkoop, praktisch onbeperkt, en de gebruikelijke plek voor ruwe events, back-ups en media: eenmaal geschreven, zelden gelezen, eeuwig bewaard.",[2902,2903,2904,2905],"S3","S3-compatibele opslag","object storage","blob storage",[2907],{"kind":2538,"url":2908},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[2558],"\u002Fglossary#object-storage",{"slug":275,"term":2912,"definition":2913,"category":2528,"aliases":2914,"links":2916,"related":2921,"readMore":-1,"target":2922,"hasArticle":2523},"PCI-DSS","De beveiligingsstandaard van de kaartindustrie die iedereen bindt die kaartgegevens opslaat, verwerkt of verstuurt. De meeste apps blijven er bewust buiten door de kaartinvoer over te laten aan een gecertificeerde betaaldienstverlener.",[276,2915],"Payment Card Industry Data Security Standard",[2917,2919],{"kind":2519,"url":2918},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":2538,"url":2920},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[1110],"\u002Fglossary#pci-dss",{"slug":2924,"term":2925,"definition":2926,"category":2514,"aliases":2927,"links":2931,"related":2934,"readMore":-1,"target":2935,"hasArticle":2523},"platform-channels","Platform channels","De brug waarmee een Flutter-app native iOS- en Android-code aanroept — Keychain en Keystore, biometrie, betaalschermen, elke SDK zonder Dart-pakket. Routinewerk maar echt werk, en de eerste plek waar een engineer die nooit buiten Dart kwam vastloopt.",[2928,2929,2930],"platform channel","method channel","platformkanaal",[2932],{"kind":2551,"url":2933},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":2937,"term":2938,"definition":2939,"category":2817,"aliases":2940,"links":2944,"related":2947,"readMore":-1,"target":2948,"hasArticle":2523},"post-quantum-cryptography","Post-quantumcryptografie","Versleutelingsalgoritmen die veilig moeten blijven tegen een toekomstige quantumcomputer, inmiddels gestandaardiseerd door NIST. De migratie is nu al dringend, nog vóór die hardware bestaat, omdat verkeer dat vandaag wordt onderschept later alsnog te ontsleutelen valt.",[2941,2942,2943],"PQC","post-quantum cryptography","postkwantumcryptografie",[2945],{"kind":2538,"url":2946},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[257,181],"\u002Fglossary#post-quantum-cryptography",{"slug":2803,"term":2950,"definition":2951,"category":2794,"aliases":2952,"links":2956,"related":2959,"readMore":-1,"target":2961,"hasArticle":2523},"Product-market fit","Het punt waarop een product aantoonbaar mensen heeft gevonden die het willen — ze gebruiken het, komen terug en betalen. Daarvoor beantwoordt engineering een vraag; daarna bedient engineering de vraag.",[2953,2954,2955],"PMF","product\u002Fmarket fit","productmarktfit",[2957],{"kind":2538,"url":2958},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[2848,2960],"time-to-market","\u002Fglossary#product-market-fit",{"slug":2963,"term":2964,"definition":2965,"category":2528,"aliases":2966,"links":2969,"related":2972,"readMore":-1,"target":2974,"hasArticle":2523},"prompt-injection","Prompt injection","Een aanval waarbij tekst van een gebruiker door een taalmodel als instructie wordt gelezen in plaats van als data, en het model zo om zijn eigen regels heen wordt gestuurd. De LLM-variant van SQL-injectie, en hij duikt overal op waar gebruikersinvoer in een prompt wordt geplakt.",[2967,2968],"injectieaanval","injection attack",[2970],{"kind":2538,"url":2971},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[2973],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":2693,"term":2976,"definition":2977,"category":2589,"aliases":2978,"links":2981,"related":2984,"readMore":-1,"target":2985,"hasArticle":2523},"Pub\u002FSub","Een berichtenpatroon waarin een producent een gebeurtenis publiceert en willekeurig veel consumenten die elk voor zich lezen, met een broker ertussen. De producent wacht nooit op ze, en zo blijft een verzoekpad snel terwijl het tragere werk erachter gebeurt.",[2979,2980],"publish\u002Fsubscribe","Google Cloud Pub\u002FSub",[2982],{"kind":2538,"url":2983},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":2596,"term":2987,"definition":2988,"category":2589,"aliases":2989,"links":2992,"related":2995,"readMore":-1,"target":2996,"hasArticle":2523},"REST","De gangbare stijl voor HTTP-API's: een URL benoemt een resource en het HTTP-werkwoord zegt wat ermee moet gebeuren. De standaardmanier waarop een app met een backend praat, en wat de meeste externe integraties verwachten aan te treffen.",[2990,2991],"REST API","Representational State Transfer",[2993],{"kind":2538,"url":2994},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[2692,2694],"\u002Fglossary#rest",{"slug":2973,"term":2998,"definition":2999,"category":2528,"aliases":3000,"links":3004,"related":3007,"readMore":-1,"target":3008,"hasArticle":2523},"Rate limiting","Een bovengrens op het aantal verzoeken dat één aanroeper binnen een bepaald venster mag doen. Het houdt tegen dat één enthousiaste gebruiker, een scraper of een bot in een middag een maand aan betaald API-budget opmaakt, en het moet aan jouw kant van de integratie staan.",[3001,3002,3003],"rate limit","throttling","verzoeklimiet",[3005],{"kind":2538,"url":3006},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[2963],"\u002Fglossary#rate-limiting",{"slug":2541,"term":3010,"definition":3011,"category":2528,"aliases":3012,"links":3015,"related":3018,"readMore":-1,"target":3019,"hasArticle":2523},"SOC 2","Een rapport van een externe auditor over hoe een organisatie met klantgegevens omgaat — beveiliging, beschikbaarheid, vertrouwelijkheid — en niet een certificaat dat je koopt. Zakelijke kopers vragen erom, en het beperkt de architectuur lang voordat de audit dat doet.",[3013,3014],"SOC2","System and Organization Controls",[3016],{"kind":2538,"url":3017},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[275,2525,2542],"\u002Fglossary#soc-2",{"slug":3021,"term":3022,"definition":3023,"category":2794,"aliases":3024,"links":3027,"related":3030,"readMore":-1,"target":3031,"hasArticle":2523},"saas","SaaS","Software die als doorlopend abonnement op een gehost product wordt verkocht in plaats van als eenmalige licentie die de klant zelf installeert en draait. De leverancier beheert de servers, levert doorlopend updates en factureert per gebruiker of per verbruik.",[3025,3026],"Software as a Service","software-as-a-service",[3028],{"kind":2538,"url":3029},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[2710,2709],"\u002Fglossary#saas",{"slug":2694,"term":3033,"definition":3034,"category":2817,"aliases":3035,"links":3037,"related":3040,"readMore":-1,"target":3041,"hasArticle":2523},"Server-Sent Events","Een eenrichtingsstroom van server naar client over een gewone HTTP-verbinding. Eenvoudiger dan een WebSocket en het volstaat overal waar alleen de server iets te melden heeft — een voortgangsfeed, een AI-antwoord dat token voor token binnenkomt.",[3036],"SSE",[3038],{"kind":2538,"url":3039},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[2692,2596],"\u002Fglossary#server-sent-events",{"slug":2767,"term":3043,"definition":3044,"category":2589,"aliases":3045,"links":3049,"related":3052,"readMore":-1,"target":3053,"hasArticle":2523},"Server-side rendering","Een pagina op de server als kant-en-klare HTML opbouwen, zodat het eerste antwoord de inhoud, koppen, metatags en gestructureerde data al meedraagt. Crawlers, linkvoorbeelden en trage apparaten lezen dat zonder JavaScript uit te voeren.",[3046,3047,3048],"SSR","server-rendered","renderen op de server",[3050],{"kind":2538,"url":3051},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[2757],"\u002Fglossary#server-side-rendering",{"slug":2788,"term":3055,"definition":3056,"category":2514,"aliases":3057,"links":3060,"related":3065,"readMore":-1,"target":3066,"hasArticle":2523},"Skia","De opensource 2D-graphicsbibliotheek van Google die Chrome, Android en — tot Impeller — elk Flutter-frame tekent. Ze rendert net zo goed naar PDF als naar een scherm, en dat is wat print-naar-PDF in Chrome doet.",[3058,3059],"Skia Graphics Engine","skia-safe",[3061,3063],{"kind":2519,"url":3062},"https:\u002F\u002Fskia.org\u002F",{"kind":2538,"url":3064},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[2780],"\u002Fglossary#skia",{"slug":3068,"term":2020,"definition":3069,"category":2589,"aliases":3070,"links":3074,"related":3077,"readMore":-1,"target":3078,"hasArticle":2523},"state-management","Hoe een app bepaalt waar een waarde leeft, wie hem mag wijzigen en welke delen van het scherm opnieuw tekenen als dat gebeurt. In Flutter is de keuze tussen Riverpod, BLoC en Provider een van de eerste architectuurbesluiten en het lastigst te herzien.",[3071,3072,3073],"statemanagement","BLoC","Riverpod",[3075],{"kind":2551,"url":3076},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[2723],"\u002Fglossary#state-management",{"slug":257,"term":258,"definition":3080,"category":2817,"aliases":3081,"links":3085,"related":3088,"readMore":-1,"target":3089,"hasArticle":2523},"De versleutelingslaag onder HTTPS. Ze bewijst dat de server is wie zijn certificaat zegt, spreekt een verse sleutel voor de sessie af en versleutelt alles daarna — zodat het netwerk ertussen alleen cijfertekst ziet die het niet stiekem kan wijzigen.",[3082,3083,3084],"SSL","HTTPS","Transport Layer Security",[3086],{"kind":2538,"url":3087},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[181,1110],"\u002Fglossary#tls",{"slug":3091,"term":3092,"definition":3093,"category":2794,"aliases":3094,"links":3100,"related":3101,"readMore":-1,"target":3103,"hasArticle":2523},"staff-augmentation","Teamuitbreiding","Een inhuurmodel waarbij engineers van een externe partner bij je team komen en onder jouw aansturing werken — in jouw repository, jouw sprints, jouw proces — in plaats van een eigen project op te leveren. Je koopt capaciteit; de code en de context blijven bij jou.",[3095,3096,3097,3098,3099],"staff augmentation","team augmentation","dedicated developers","outstaffing","teamversterking",[],[3102,2960],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":2960,"term":3105,"definition":3106,"category":2794,"aliases":3107,"links":3110,"related":3113,"readMore":-1,"target":3114,"hasArticle":2523},"Time to market","Hoe lang het duurt om een product van besluit naar echte gebruikers te krijgen. De meeste discussies over stack en scope gaan eigenlijk over dit getal, want elke gewonnen week is een week omzet, feedback en concurrentiepositie.",[3108,2960,3109],"TTM","doorlooptijd tot de markt",[3111],{"kind":2538,"url":3112},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[2848,3102],"\u002Fglossary#time-to-market",{"slug":3102,"term":3116,"definition":3117,"category":2794,"aliases":3118,"links":3122,"related":3125,"readMore":-1,"target":3126,"hasArticle":2523},"Total cost of ownership","Wat een product over zijn hele leven kost in plaats van alleen de bouw: onderhoud, upgrades, jaarlijkse OS- en winkelmigraties, en het tweede team dat je aanneemt om twee codebases gelijk te houden. Meestal groter dan de bouwofferte, en er vrijwel nooit in opgenomen.",[3119,3120,3121],"TCO","kosten van eigenaarschap","totale eigendomskosten",[3123],{"kind":2538,"url":3124},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[2960],"\u002Fglossary#total-cost-of-ownership",{"slug":3128,"term":2028,"definition":3129,"category":2817,"aliases":3130,"links":3132,"related":3137,"readMore":-1,"target":3139,"hasArticle":2523},"webrtc","De standaard voor browsers en mobiel om audio, video en data rechtstreeks tussen twee apparaten te sturen, waarbij servers er alleen aan te pas komen om ze aan elkaar voor te stellen. Hierop is een videogesprek in een app gebouwd, tenzij er een gehuurde SDK onder zit.",[3131],"Web Real-Time Communication",[3133,3135],{"kind":2519,"url":3134},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":2538,"url":3136},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[3138,2692],"xmpp","\u002Fglossary#webrtc",{"slug":2692,"term":3141,"definition":3142,"category":2817,"aliases":3143,"links":3144,"related":3147,"readMore":-1,"target":3148,"hasArticle":2523},"WebSocket","Een protocol dat één verbinding openhoudt tussen client en server, zodat beide kanten op elk moment kunnen sturen in plaats van dat de client keer op keer vraagt. Waar live koersen, chat en aanwezigheidsindicatoren op draaien.",[],[3145],{"kind":2538,"url":3146},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[2694,2596],"\u002Fglossary#websocket",{"slug":2709,"term":3150,"definition":3151,"category":2794,"aliases":3152,"links":3156,"related":3159,"readMore":3160,"target":3160,"hasArticle":451},"White-label","Eén product dat onder veel merken wordt uitgebracht. Een white-label platform voor mobiel bouwt elke klant een winkelklare app met een eigen naam, ontwerp en content vanuit één gedeelde codebase, in plaats van het project per klant te forken.",[3153,3154,3155],"white label","multi-tenant app","merkloos product",[3157],{"kind":2538,"url":3158},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[2848],"\u002Fglossary\u002Fwhite-label",{"slug":3138,"term":3162,"definition":3163,"category":2817,"aliases":3164,"links":3167,"related":3172,"readMore":-1,"target":3173,"hasArticle":2523},"XMPP","Een open, gefedereerd berichtenprotocol, en al lang het alternatief voor zelf een chatbackend schrijven of er een huren. Het dekt ook aanwezigheid, typindicatoren en bestandsoverdracht, en het is oud genoeg dat elk platform een volwassen clientbibliotheek heeft.",[3165,3166],"Jabber","Extensible Messaging and Presence Protocol",[3168,3170],{"kind":2519,"url":3169},"https:\u002F\u002Fxmpp.org\u002F",{"kind":2538,"url":3171},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[3128,2692],"\u002Fglossary#xmpp"]