<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Technical Notes</title><link>https://yanal.fargialla.com/en/</link><description>Recent content in Home on Technical Notes</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://yanal.fargialla.com/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Architecture and concepts - 1/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/01-architecture-concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/01-architecture-concepts/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#introduction"&gt;Introduction&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#purpose-and-audience"&gt;Purpose and audience&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#concepts-specific-to-email"&gt;Concepts specific to email&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#the-mail-sending-protocol-smtp"&gt;The mail-sending protocol: SMTP&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#structure-of-an-email"&gt;Structure of an email&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#the-envelope---smtp-protocol"&gt;The Envelope - SMTP protocol&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-header---rfc-5322"&gt;The Header - RFC 5322&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-body"&gt;The Body&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-journey-of-an-email"&gt;The journey of an email&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-postal-analogy"&gt;The postal analogy&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="introduction"&gt;Introduction&lt;a class="anchor" href="#introduction"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="purpose-and-audience"&gt;Purpose and audience&lt;a class="anchor" href="#purpose-and-audience"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are three types of users of the email system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mailbox users&lt;/li&gt;
&lt;li&gt;Domain administrators&lt;/li&gt;
&lt;li&gt;Email infrastructure maintainers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This series of articles is aimed at domain administrators who need to configure email mailboxes in a way that prevents identity spoofing.&lt;/p&gt;</description></item><item><title>When proprietary software abandons us</title><link>https://yanal.fargialla.com/en/logiciel-libre/01-quand-le-logiciel-privateur-nous-abandonne/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/logiciel-libre/01-quand-le-logiciel-privateur-nous-abandonne/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#why-this-article"&gt;Why this article&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-1--the-music-school-and-microsoft-access"&gt;Experience 1 — The music school and Microsoft Access&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-2--homelidays-and-the-millions-of-lines-of-classic-asp"&gt;Experience 2 — Homelidays and the millions of lines of Classic ASP&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-3--visual-studio-and-the-deleted-msi-installer-projects"&gt;Experience 3 — Visual Studio and the deleted MSI installer projects&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-4--the-consignment-shop-and-the-windows-licence"&gt;Experience 4 — The consignment shop and the Windows licence&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-5--windows-7-then-windows-10-imposed-waste"&gt;Experience 5 — Windows 7 then Windows 10: imposed waste&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-6--windows-phone-a-new-phone-with-every-generation"&gt;Experience 6 — Windows Phone: a new phone with every generation&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-7--onedrive-and-our-family-photos"&gt;Experience 7 — OneDrive and our family photos&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-8--balsamiq-and-the-imprisoned-file-format"&gt;Experience 8 — Balsamiq and the imprisoned file format&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-9--pc-soft-changing-the-rules-mid-game"&gt;Experience 9 — PC Soft: changing the rules mid-game&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#experience-10--azure-devops-projects-trapped-in-their-collection"&gt;Experience 10 — Azure DevOps: projects trapped in their collection&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-common-thread-who-really-controls-the-software"&gt;The common thread: who really controls the software?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#free-software-regaining-room-to-manoeuvre"&gt;Free software: regaining room to manoeuvre&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#and-me-in-all-this-a-path-not-a-posture"&gt;And me, in all this? A path, not a posture&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#sources-and-references"&gt;Sources and references&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="why-this-article"&gt;Why this article&lt;a class="anchor" href="#why-this-article"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I spent more than twenty years developing and architecting software. Over those years, I watched the same scenario repeat itself: a technology company decides, &lt;strong&gt;alone and unilaterally&lt;/strong&gt;, to abandon a technology, break compatibility, change a price or a licence — and users, freelancers, associations, whole companies find themselves left high and dry. Not by accident, but because the very model of &lt;strong&gt;proprietary software&lt;/strong&gt; allows it.&lt;/p&gt;</description></item><item><title>Standard email addresses - 2/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/02-standard-e-mails/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/02-standard-e-mails/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#-in-short-for-a-typical-domain-email-and-website"&gt;💡 In short, for a typical domain (email and website)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#detailed-explanation"&gt;Detailed explanation&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#1-the-essentials-technical-requirement"&gt;1. The Essentials (Technical Requirement)&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#abuse"&gt;&lt;strong&gt;&lt;code&gt;abuse@&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#postmaster"&gt;&lt;strong&gt;&lt;code&gt;postmaster@&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#2-service-standards-rfc-2142"&gt;2. Service Standards (RFC 2142)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#3-ssltls-validation-certificates"&gt;3. SSL/TLS Validation (Certificates)&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The anti-spoofing protocols we will cover in the following articles are the walls of your fortress, and the standard email addresses are the guard posts. If you build the walls (SPF/DKIM) but there is no one in the guard posts (postmaster/abuse) to hear the alarms, your security will eventually be bypassed or degraded without your knowing it. Let&amp;rsquo;s start by configuring the standard email addresses.&lt;/p&gt;</description></item><item><title>The flip side of permissive licences — FreeBSD, and freedom for whom?</title><link>https://yanal.fargialla.com/en/logiciel-libre/02-licences-permissives-freebsd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/logiciel-libre/02-licences-permissives-freebsd/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#what-is-a-permissive-licence"&gt;What is a permissive licence?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#freebsd-a-complete-operating-system-free-and-permissive"&gt;FreeBSD, a complete operating system, free… and permissive&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#how-the-giants-exploit-freebsd"&gt;How the giants exploit FreeBSD&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#netflix-the-invisible-infrastructure"&gt;Netflix: the invisible infrastructure&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#sony-playstation-the-locked-fortress"&gt;Sony PlayStation: the locked fortress&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#apple-the-technological-frankenstein"&gt;Apple: the technological Frankenstein&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-nuance-what-the-giants-really-give-back"&gt;The nuance: what the giants really give back&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#and-copyleft"&gt;And copyleft?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#sources-and-references"&gt;Sources and references&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;In the &lt;a href="../01-quand-le-logiciel-privateur-nous-abandonne/"&gt;founding article of this series&lt;/a&gt;, I recounted how proprietary software ends up abandoning its users. The answer I champion is free software. But &amp;ldquo;free&amp;rdquo; is not a single block: there are two great families of licences, with opposing philosophies.&lt;/p&gt;</description></item><item><title>Copyleft licences: the freedom that can't be taken back</title><link>https://yanal.fargialla.com/en/logiciel-libre/03-licences-copyleft/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/logiciel-libre/03-licences-copyleft/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#what-is-copyleft"&gt;What is copyleft?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#how-the-gpl-came-to-be"&gt;How the GPL came to be&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#two-axes-to-keep-from-getting-lost"&gt;Two axes to keep from getting lost&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-gpl-family-lgpl-gpl-agpl-the-strength-axis"&gt;The GPL family: LGPL, GPL, AGPL (the &amp;ldquo;strength&amp;rdquo; axis)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#tivoization-and-the-asymmetry-of-power"&gt;Tivoization and the asymmetry of power&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#beyond-tivoization-the-other-contributions-of-gplv3"&gt;Beyond tivoization: the other contributions of GPLv3&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#two-philosophies-one-wish"&gt;Two philosophies, one wish&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#sources-and-references"&gt;Sources and references&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The &lt;a href="../02-licences-permissives-freebsd/"&gt;first instalment of this series&lt;/a&gt; explored &lt;strong&gt;permissive&lt;/strong&gt; licences (BSD, MIT, Apache) through FreeBSD: they leave everyone free to do what they like with the code, &lt;strong&gt;including closing it back up&lt;/strong&gt;. Here is their counterpart: &lt;strong&gt;copyleft&lt;/strong&gt; licences.&lt;/p&gt;</description></item><item><title>FCrDNS and cross-validation - 3/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/03-fcrdns-validation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/03-fcrdns-validation/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#how-it-works"&gt;How it works&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#phase-1-the-connection-and-the-announcement"&gt;Phase 1: The connection and the announcement&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#phase-2-reverse-lookup-the-reverse"&gt;Phase 2: Reverse lookup (the &amp;ldquo;Reverse&amp;rdquo;)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#phase-3-generic-ptr-check-non-genericity-verification"&gt;Phase 3: Generic PTR check (non-genericity verification)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#phase-4-forward-lookup-the-forward"&gt;Phase 4: Forward lookup (the &amp;ldquo;Forward&amp;rdquo;)&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#phase-5-the-helo-consistency-check"&gt;Phase 5: The &amp;ldquo;HELO&amp;rdquo; consistency check&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#summary"&gt;Summary&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#protection-against-amateur-spammers"&gt;Protection against &amp;ldquo;amateur&amp;rdquo; spammers&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#limitation"&gt;Limitation&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="how-it-works"&gt;How it works&lt;a class="anchor" href="#how-it-works"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This technique emerged as a best practice in the 1990s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The security principle:&lt;/strong&gt; The robustness of this technique relies on the need to control both the IP infrastructure (the hosting side) and the DNS zone (the domain side). An attacker who holds only one of the two accesses will not be able to pass the test.&lt;/p&gt;</description></item><item><title>SPF (Sender Policy Framework) - 4/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/04-spf-sender-policy-framework/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/04-spf-sender-policy-framework/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#how-it-works"&gt;How it works&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#limits"&gt;Limits&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#sophisticated-esp-delegation-and-the-alignment-problem"&gt;Sophisticated ESP delegation and the alignment problem&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#the-classic-spf-mechanism"&gt;The classic SPF mechanism&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-failure-to-authenticate-the-end-user"&gt;The failure to authenticate the end user&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-workaround-for-the-problem"&gt;The workaround for the problem&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#spf-does-not-survive-email-forwarding"&gt;SPF does not survive email forwarding&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-technical-constraint-the-10-dns-query-limit"&gt;The technical constraint: the 10 DNS query limit&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#a-few-useful-urls"&gt;A few useful URLs&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="how-it-works"&gt;How it works&lt;a class="anchor" href="#how-it-works"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Standardized in 2006 (&lt;a href="https://www.rfc-editor.org/rfc/rfc4408" target="_blank" rel="noopener"&gt;RFC 4408&lt;/a&gt;), updated in 2014 (&lt;a href="https://www.rfc-editor.org/rfc/rfc7208" target="_blank" rel="noopener"&gt;RFC 7208&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;SPF acts as a trust directory. The owner of domain &lt;code&gt;a.com&lt;/code&gt; publishes in its DNS (a &lt;code&gt;TXT&lt;/code&gt; record) the list of IPs authorized to send email on its behalf.&lt;br&gt;
When an email arrives, the receiving server checks the sending IP against this list. Note: SPF verifies the domain announced in the envelope&amp;rsquo;s &lt;code&gt;MAIL FROM&lt;/code&gt; command — the very one that will be copied into the &lt;code&gt;Return-Path&lt;/code&gt; upon receipt —, and &lt;strong&gt;not&lt;/strong&gt; the &lt;code&gt;From&lt;/code&gt; (the header visible to the user).&lt;/p&gt;</description></item><item><title>Why the Linux kernel stayed on GPLv2: Torvalds versus GPLv3</title><link>https://yanal.fargialla.com/en/logiciel-libre/04-torvalds-gplv3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/logiciel-libre/04-torvalds-gplv3/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#a-preliminary-point-gplv2-only-not-v2-or-later"&gt;A preliminary point: &amp;ldquo;GPLv2 only,&amp;rdquo; not &amp;ldquo;v2 or later&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-core-objection-the-licence-covers-the-software-not-the-hardware"&gt;The core objection: the licence covers the software, not the hardware&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#pro-drm-what-he-actually-said"&gt;&amp;ldquo;Pro-DRM&amp;rdquo;: what he actually said&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-real-divide-fsf-ethics-versus-open-source-pragmatism"&gt;The real divide: FSF ethics versus open-source pragmatism&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#in-short"&gt;In short&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#sources-and-references"&gt;Sources and references&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;In the &lt;a href="../03-licences-copyleft/"&gt;previous article on copyleft licences&lt;/a&gt;, one detail was worth pausing on properly: &lt;strong&gt;GPLv3&lt;/strong&gt; (2007) added an &lt;strong&gt;anti-tivoization&lt;/strong&gt; clause, and the &lt;strong&gt;Linux kernel&lt;/strong&gt; never moved to GPLv3. The most visible opponent of that version: &lt;strong&gt;Linus Torvalds&lt;/strong&gt;, the creator of Linux.&lt;/p&gt;</description></item><item><title>DKIM (DomainKeys Identified Mail) - 5/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/05-dkim-domainkeys-identified-mail/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/05-dkim-domainkeys-identified-mail/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#how-it-works-the-police-evidence-seal"&gt;How it works: the police evidence seal&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#resistance-to-forwarding"&gt;Resistance to forwarding&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#limits"&gt;Limits&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#dkim-does-not-guarantee-the-authenticity-of-the-visible-sender-in-the-from-header-field"&gt;DKIM does not guarantee the authenticity of the visible sender in the &lt;code&gt;From&lt;/code&gt; header field&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-replay-attack-and-its-mitigation"&gt;The Replay attack and its mitigation&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="how-it-works-the-police-evidence-seal"&gt;How it works: the police evidence seal&lt;a class="anchor" href="#how-it-works-the-police-evidence-seal"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Standardized in 2007 (&lt;a href="https://www.rfc-editor.org/rfc/rfc4871" target="_blank" rel="noopener"&gt;RFC 4871&lt;/a&gt;), updated in 2011 (&lt;a href="https://www.rfc-editor.org/rfc/rfc6376" target="_blank" rel="noopener"&gt;RFC 6376&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Whereas SPF protects the envelope (the sending server), DKIM (DomainKeys Identified Mail) protects the message itself. It is the digital equivalent of a police evidence seal:&lt;/p&gt;</description></item><item><title>DMARC (Domain-based Message Authentication) - 6/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/06-dmarc-domain-based-message-authentication-reporting-and-conformance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/06-dmarc-domain-based-message-authentication-reporting-and-conformance/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#the-conductor"&gt;The Conductor&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-3-pillars-of-dmarc"&gt;The 3 pillars of DMARC&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#going-further"&gt;Going further&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#the-two-alignment-modes-relaxed-and-strict"&gt;The two alignment modes: &lt;code&gt;relaxed&lt;/code&gt; and &lt;code&gt;strict&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#aligning-spf-the-custom-return-path"&gt;Aligning SPF: the custom Return-Path&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#where-to-publish-or-not-a-providers-spf"&gt;Where to publish (or not) a provider&amp;rsquo;s SPF&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#a-note-on-forwarding-and-mailing-lists-srs--arc"&gt;A note on forwarding and Mailing Lists (SRS &amp;amp; ARC)&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#a-few-useful-urls"&gt;A few useful URLs&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="the-conductor"&gt;The Conductor&lt;a class="anchor" href="#the-conductor"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Published in 2015 (&lt;a href="https://www.rfc-editor.org/rfc/rfc7489" target="_blank" rel="noopener"&gt;RFC 7489&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;So far, we have seen that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SPF validates the IP but verifies the &lt;code&gt;Return-Path&lt;/code&gt;, not the &lt;code&gt;From&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;DKIM validates the content and verifies the signature domain (&lt;code&gt;d=&lt;/code&gt;). It does not verify the &lt;code&gt;From&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;DMARC (Domain-based Message Authentication, Reporting, and Conformance)&lt;/strong&gt; does not offer a new technical authentication method, but a policy layer that builds on SPF and DKIM to solve the &lt;strong&gt;alignment&lt;/strong&gt; problem.&lt;/p&gt;</description></item><item><title>BIMI and an analysis of its limits - 7/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/07-bimi-brand-indicators-for-message-identification-analyse-des-limites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/07-bimi-brand-indicators-for-message-identification-analyse-des-limites/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#the-security-risk-the-vulnerability-of-the-decoupled-architecture"&gt;The security risk: the vulnerability of the decoupled architecture&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#detailed-scenario"&gt;Detailed scenario&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#an-economic-barrier-to-entry-vmc"&gt;An economic barrier to entry (VMC)&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;In the email security ecosystem, &lt;strong&gt;BIMI (Brand Indicators for Message Identification)&lt;/strong&gt; is often presented as the logical next step after achieving DMARC compliance. The goal is to allow a certified logo to be displayed in email clients in order to reinforce visual trust.&lt;/p&gt;
&lt;p&gt;However, an in-depth technical analysis reveals that this protocol is more complex than it appears. Unlike SPF or DKIM, which are purely declarative, BIMI generally relies on a trusted third party through a digital certificate called a VMC (Verified Mark Certificate). While this mechanism works in integrated environments (such as the Google or Yahoo webmails), it runs into major structural obstacles as soon as it is confronted with the open, standardized architecture of email.&lt;/p&gt;</description></item><item><title>Parked Domain Locking - 8/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/08-parked-domain-locking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/08-parked-domain-locking/</guid><description>&lt;p&gt;A domain that sends no email at all must still configure SPF, DKIM and DMARC in order to declare: &amp;ldquo;This domain never sends email. If you receive one, discard it immediately.&amp;rdquo; This is essential to protect against spoofing: attackers could use &amp;ldquo;dormant&amp;rdquo; domains or variations of your domain (typosquatting) to send phishing, since no one is watching them.&lt;/p&gt;
&lt;p&gt;Here is the DNS configuration to apply:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Host / Name&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;TXT&lt;/td&gt;
 &lt;td&gt;@&lt;/td&gt;
 &lt;td&gt;v=spf1 -all&lt;/td&gt;
 &lt;td&gt;SPF &lt;br&gt;(Declares that no one is authorized to send email on behalf of the domain)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;TXT&lt;/td&gt;
 &lt;td&gt;_dmarc&lt;/td&gt;
 &lt;td&gt;v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;&lt;/td&gt;
 &lt;td&gt;DMARC (Asks the recipient to reject any email that claims to come from the domain)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;TXT&lt;/td&gt;
 &lt;td&gt;*._domainkey&lt;/td&gt;
 &lt;td&gt;v=DKIM1; p=&lt;/td&gt;
 &lt;td&gt;DKIM (Invalidates all keys)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MX&lt;/td&gt;
 &lt;td&gt;@&lt;/td&gt;
 &lt;td&gt;. (Priority 0)&lt;/td&gt;
 &lt;td&gt;MX (this domain does not receive email &lt;a href="https://www.rfc-editor.org/rfc/rfc7505" target="_blank" rel="noopener"&gt;RFC 7505&lt;/a&gt; (Null MX))&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Summary and conclusion - 9/9</title><link>https://yanal.fargialla.com/en/antispoofing-e-mail/09-synthese-et-conclusion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/antispoofing-e-mail/09-synthese-et-conclusion/</guid><description>&lt;div class="book-toc-inline"&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#summary-and-conclusion"&gt;Summary and conclusion&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#a-few-useful-urls"&gt;A few useful URLs&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
 &lt;/div&gt;
&lt;/div&gt;


&lt;h2 id="summary-and-conclusion"&gt;Summary and conclusion&lt;a class="anchor" href="#summary-and-conclusion"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mechanism&lt;/th&gt;
 &lt;th&gt;Date / RFC&lt;/th&gt;
 &lt;th&gt;Metaphor&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;th&gt;Key limits&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;FCrDNS&lt;/td&gt;
 &lt;td&gt;~1990s&lt;/td&gt;
 &lt;td&gt;The technical inspection of the truck that carries the envelopes.&lt;/td&gt;
 &lt;td&gt;Validates that the &lt;strong&gt;infrastructure owner&lt;/strong&gt; (the one who controls the IP / L3) and the &lt;strong&gt;identity owner&lt;/strong&gt; (the one who controls the Domain / L7) agree. &lt;br&gt;&lt;br/&gt;Verifies that the sender&amp;rsquo;s &lt;code&gt;PTR&lt;/code&gt; is not generic.&lt;/td&gt;
 &lt;td&gt;Does not prove that the source IP is legitimate to send an email on behalf of the sending domain, nor that the message has not been forged.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SPF&lt;/td&gt;
 &lt;td&gt;2006 (&lt;a href="https://www.rfc-editor.org/rfc/rfc4408" target="_blank" rel="noopener"&gt;RFC 4408&lt;/a&gt;) &lt;br&gt;&lt;br/&gt;2014 (&lt;a href="https://www.rfc-editor.org/rfc/rfc7208" target="_blank" rel="noopener"&gt;RFC 7208&lt;/a&gt;)&lt;/td&gt;
 &lt;td&gt;Validates that the truck is authorized to carry the sender&amp;rsquo;s mail.&lt;/td&gt;
 &lt;td&gt;Authorizes a list of IPs to send email on behalf of the domain indicated in the &lt;code&gt;Return-Path&lt;/code&gt;.&lt;/td&gt;
 &lt;td&gt;Vulnerable to redirection. No alignment with the visible field (&lt;code&gt;From&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DKIM&lt;/td&gt;
 &lt;td&gt;2007 (&lt;a href="https://www.rfc-editor.org/rfc/rfc4871" target="_blank" rel="noopener"&gt;RFC 4871&lt;/a&gt;) &lt;br&gt;&lt;br/&gt;2011 (&lt;a href="https://www.rfc-editor.org/rfc/rfc6376" target="_blank" rel="noopener"&gt;RFC 6376&lt;/a&gt;)&lt;/td&gt;
 &lt;td&gt;Digital wax seal &lt;br&gt;&lt;br/&gt;Police evidence seal&lt;/td&gt;
 &lt;td&gt;Guarantees the integrity and authenticity of the message by adding a cryptographic signature to it. (&lt;code&gt;d=&lt;/code&gt; in the DKIM header).&lt;/td&gt;
 &lt;td&gt;No mandatory alignment with &lt;code&gt;From&lt;/code&gt;. &lt;br&gt;&lt;br/&gt;Does not guarantee confidentiality (the email remains readable).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DMARC&lt;/td&gt;
 &lt;td&gt;2015 (&lt;a href="https://www.rfc-editor.org/rfc/rfc7489" target="_blank" rel="noopener"&gt;RFC 7489&lt;/a&gt;)&lt;/td&gt;
 &lt;td&gt;The Butler (head of the protocol). &lt;br&gt;&lt;br/&gt;Verifies that the letter&amp;rsquo;s header is aligned either with the address on the back of the envelope (SPF) or with the digital wax seal (DKIM signature)&lt;/td&gt;
 &lt;td&gt;Verifies the alignment of the domain verified by SPF or DKIM with the visible domain (&lt;code&gt;From&lt;/code&gt;). &lt;br&gt;&lt;br/&gt;Defines the policy for handling failures (&lt;code&gt;none&lt;/code&gt;, &lt;code&gt;quarantine&lt;/code&gt;, &lt;code&gt;reject&lt;/code&gt;). &lt;br&gt;&lt;br/&gt;Enables reporting (RUA/RUF)&lt;/td&gt;
 &lt;td&gt;Works only if SPF/DKIM are implemented and the policy is active.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Securing email is not the business of a single protocol, but rests on a defense-in-depth strategy. Combining the FCrDNS, SPF, DKIM and DMARC protocols makes it possible to create a robust chain of trust, making technical identity spoofing almost impossible, provided the chain is not broken.&lt;/p&gt;</description></item><item><title>Quiz: Polymorphism</title><link>https://yanal.fargialla.com/en/programmation/polymorphisme/quiz-polymorphisme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/programmation/polymorphisme/quiz-polymorphisme/</guid><description>&lt;h2 id="-test-your-knowledge"&gt;📝 Test your knowledge&lt;a class="anchor" href="#-test-your-knowledge"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Have you really grasped the internal mechanics of polymorphism and Vtables? This is the moment to check whether you have mastered the difference between static and dynamic binding. Click &amp;ldquo;See the answer&amp;rdquo; to confirm.&lt;/p&gt;
&lt;h3 id="question-1"&gt;Question 1&lt;a class="anchor" href="#question-1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;In the code &lt;code&gt;Animal a = new Dog();&lt;/code&gt;, if you call &lt;code&gt;a.SayHello()&lt;/code&gt; (a non-virtual method), which version of the method is executed?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A) The one from the &lt;code&gt;Dog&lt;/code&gt; class because the object is a Dog.&lt;/li&gt;
&lt;li&gt;B) The one from the &lt;code&gt;Animal&lt;/code&gt; class because the variable is of type Animal.&lt;/li&gt;
&lt;li&gt;C) None, it causes a compilation error.&lt;/li&gt;
&lt;li&gt;D) The &lt;code&gt;Dog&lt;/code&gt;&amp;rsquo;s one, only if it uses the &lt;code&gt;override&lt;/code&gt; keyword.&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;🔻 See the answer&lt;/summary&gt;
&lt;blockquote&gt;
&lt;strong&gt;Answer B: The one from the `Animal` class.&lt;/strong&gt;&lt;br&gt;
Since the method is not virtual, the compiler uses static binding. It relies solely on the type of the &lt;strong&gt;variable&lt;/strong&gt; (`Animal`) and sets in stone the call to `Animal.SayHello` as early as compile time.
&lt;/blockquote&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h3 id="question-2"&gt;Question 2&lt;a class="anchor" href="#question-2"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Which C# keyword enables dynamic binding (a call via the Vtable) in the base class?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Quiz: Stack and Heap</title><link>https://yanal.fargialla.com/en/programmation/stack-vs-heap/quiz-stack-heap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yanal.fargialla.com/en/programmation/stack-vs-heap/quiz-stack-heap/</guid><description>&lt;h2 id="-test-your-knowledge"&gt;📝 Test your knowledge&lt;a class="anchor" href="#-test-your-knowledge"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Have you really grasped the nuance? This is the moment of truth. Click &amp;ldquo;See the answer&amp;rdquo; to check your understanding.&lt;/p&gt;
&lt;h3 id="question-1"&gt;Question 1&lt;a class="anchor" href="#question-1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What is the main characteristic of the Stack compared to the Heap in terms of performance?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A) It is slower but can store more data.&lt;/li&gt;
&lt;li&gt;B) It is much faster to access and allocate.&lt;/li&gt;
&lt;li&gt;C) There is no performance difference.&lt;/li&gt;
&lt;li&gt;D) It is optimized for large objects only.&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;🔻 See the answer&lt;/summary&gt;
&lt;blockquote&gt;
&lt;strong&gt;Answer B: It is much faster.&lt;/strong&gt;&lt;br&gt;
Allocation on the Stack is immediate (moving a CPU pointer), whereas the Heap requires finding a free space and managing it later via the Garbage Collector.
&lt;/blockquote&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h3 id="question-2"&gt;Question 2&lt;a class="anchor" href="#question-2"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;In C#, where is the value of a local variable of type &lt;code&gt;int&lt;/code&gt; stored (for example &lt;code&gt;int age = 25;&lt;/code&gt;)?&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>