CINXE.COM

Blogposts of Sofia Celi

<?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title>Blogposts of Sofia Celi</title> <description>Your latest posts</description> <link>http://claucece.github.io/</link> <item> <title>Breaking Post-Quantum Cryptography</title> <description>&lt;p&gt;&lt;em&gt;The breaking state of the week&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Let’s talk briefly about some attacks to post-quantum cryptography that were just announced:&lt;/p&gt; &lt;h2 id=&quot;breaking-frodokem&quot;&gt;Breaking FrodoKEM&lt;/h2&gt; &lt;p&gt;The paper &lt;a href=&quot;https://eprint.iacr.org/2022/952&quot;&gt;“When Frodo Flips: End-to-End Key Recovery on FrodoKEM via Rowhammer”&lt;/a&gt; by Michael Fahr Jr. et al. uses the &lt;a href=&quot;https://en.wikipedia.org/wiki/Row_hammer&quot;&gt;Row hammer&lt;/a&gt; security exploit to recover the private key material of the FrodoKEM scheme (it also uses decryption failure attacks). Row hammer allows flipping bits in DRAM by “hammering” rows of memory adjacent to some targeted memory location by repeated memory accesses. They use it in the attack by producing a “poisoned” key.&lt;/p&gt; &lt;p&gt;While the paper uses FrodoKEM as an example, the attack can be theoretically executed in other lattice-based KEMs (with more likelihood to Kyber or Saber, and with more difficulty to NTRU).&lt;/p&gt; &lt;h2 id=&quot;breaking-supersingular-isogeny-diffiehellman-sidh-protocol&quot;&gt;Breaking Supersingular Isogeny Diffie–Hellman (SIDH) protocol&lt;/h2&gt; &lt;p&gt;&lt;a href=&quot;https://eprint.iacr.org/2022/975&quot;&gt;The paper by Wouter Castryck and Thomas Decru&lt;/a&gt; presents a powerful key recovery attack on SIDH, and its instantiation SIKE. It is based on the “glue-and-split” &lt;a href=&quot;https://www.mast.queensu.ca/~kani/papers/numgenl.pdf&quot;&gt;theorem (Thm 2.6)&lt;/a&gt; from 1997 from Ernst Kani and very much outperforms previous attack strategies. It can be used to both recover Bob’s or Alice’s private key.&lt;/p&gt; &lt;p&gt;The attack allows for the recovery of a secret cyclic \(3^{b}\)-isogeny \(\phi : E_0 \rightarrow E\). Note that it assumes an initial input of \(\beta = 0\) and \(E_0 = E_{start}\), where the \(3^{\beta}\)-isogeny \(\tau : E_0 \rightarrow E_{start}\) for some \(\beta \geq 0\). \(E_{start} : y^{2} = x^{3} + x\) or \(E_{start} : y^{2} = x^{3} + 6x^{2} + x\), is one of the two commonly chosen base curves in SIDH/SIKE, with respective j-invariants 1728 and 287496.&lt;/p&gt; &lt;p&gt;Following the &lt;a href=&quot;https://eprint.iacr.org/2014/505.pdf&quot;&gt;work by Kohel–Lauter–Petit–Tignol&lt;/a&gt; and the &lt;a href=&quot;https://arxiv.org/pdf/1910.03180.pdf&quot;&gt;work of Love–Boneh&lt;/a&gt;, all known ways to generate a supersingular base curve \(E_0/F_{p^{2}}\) in a trustless manner reveal an isogeny of the previous form (the \(3^{\beta}\) isogeny). In this case, the attack is very powerful as the secret isogeny will be revealed. But even when this is not the case (when using, for example, a trusted set-up or a base curve generated by Alice), the glue-and-split method still lowers security.&lt;/p&gt; &lt;p&gt;In order to make the attack, an “auxiliary” cyclic \(c\)-isogeny \(\gamma: E_0 \rightarrow C\) to some codomain curve \(C\) (assuming \(c = 2a − 3b\)) is needed, with the idea of (efficiently) computing the image points \(P_c\) and \(Q_c\) under it. This is not trivial and for it is needed a factorization of an integer of size \(O(2^{a})\). Here is also needed the “special” nature of \(E_{start}\) which comes with an endomorphism \(2i\) satisfying \((2i)^{2} = −4\) (the previous stated options come with this). What essentially eventually is done is that the intermediate curves are found and with it the private key digit by digit: elliptic curves are “glued” into a Jacobian followed by \(a − \alpha1 − 2\) Richelot isogenies between Jacobians of genus-2 curves (where we also check if the last step “splits”).&lt;/p&gt; &lt;p&gt;What I truly love about the paper is that this works even for base curves without a known path to \(E_{start}\). If \(c = 2a − 3b\) is smooth, then it remains possible to construct the auxiliary isogeny \(\gamma\). Note that the likeliness of finding a smooth c is very small, so this doesn’t seem to lead to a practical attack, but it might lower the security level of some parameter sets.&lt;/p&gt; &lt;p&gt;But, does this mean that all is lost in isogeny-land? Not really. It does not affect CSIDH or SQISign. There could also be ways to counter the attack but I’ll defer until the authors publish the full paper.&lt;/p&gt; &lt;p&gt;For a nicer explanation, read the &lt;a href=&quot;https://ellipticnews.wordpress.com/2022/07/31/breaking-supersingular-isogeny-diffie-hellman-sidh/&quot;&gt;blog post&lt;/a&gt; of Galbraith or the &lt;a href=&quot;https://twitter.com/kutasp/status/1553600601317072898&quot;&gt;thread&lt;/a&gt; of Péter Kutas.&lt;/p&gt; &lt;h2 id=&quot;why-are-these-attacks-important&quot;&gt;Why are these attacks important?&lt;/h2&gt; &lt;p&gt;Attacking cryptographic protocols is important in order to properly assess their security as, when deployed in real-world situations, they lower or enhance the security of users. What these two attacks have shown us is that the post-quantum field is still young: there are still classical and quantum attack avenues to explore, and still lots of implementation attacks that could be found. Migrating to post-quantum cryptography should not be treated lightly. We still don’t have complete data if the post-quantum schemes will work for every situation that the Internet is used for, and lots of time still needs to pass until we can call the field mature.&lt;/p&gt; &lt;p&gt;Congratulations to the authors of these attacks! Finding attacks to schemes makes different fields more mature.&lt;/p&gt; </description> <pubDate>2022-07-31T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2022/07/31/breaking-pqc.html</link> <guid isPermaLink="true">http://claucece.github.io//2022/07/31/breaking-pqc.html</guid> </item> <item> <title>Post-quantum Signatures</title> <description>&lt;p&gt;&lt;em&gt;The state of many signatures&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The algorithms to standardize of the Post-Quantum NIST standarisation process are out! We have:&lt;/p&gt; &lt;p&gt;For Public-Key Encryption/KEMs:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;CRYSTALS-KYBER&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;For Digital Signatures:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;CRYSTALS-Dilithium&lt;/li&gt; &lt;li&gt;Falcon&lt;/li&gt; &lt;li&gt;SPHINCS+&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; With a note:&lt;/p&gt; &lt;p&gt;“CRYSTALS-KYBER (key-establishment) and CRYSTALS-Dilithium (digital signatures) were both selected for their strong security and excellent performance, and NIST expects them to work well in most applications. Falcon will also be standardized by NIST since there may be use cases for which CRYSTALS-Dilithium signatures are too large. Additionally, SPHINCS+ will be standardized to avoid only relying on the security of lattices for signatures. NIST asks for public feedback on a version of SPHINCS+ with a lower number of maximum signatures.”&lt;/p&gt; &lt;p&gt;&lt;br /&gt; NIST will also hold a new call for proposals for public key signatures:&lt;/p&gt; &lt;p&gt;“NIST also plans to issue a new Call for Proposals for public-key (quantum-resistant) digital signature algorithms by the end of summer 2022. NIST is primarily looking to diversify its signature portfolio, so signature schemes that are not based on structured lattices are of greatest interest. NIST would like submissions for signature schemes that have short signatures and fast verification (e.g., UOV).”&lt;/p&gt; &lt;p&gt;In this blog post, I’ll be not focusing on the post-quantum KEM, but rather on post-quantum signatures as this seems to be ‘long-road-ahead’ from both a migration perspective as from standardization.&lt;/p&gt; &lt;p&gt;So, let’s explore what post-quantum signatures are available.&lt;/p&gt; &lt;h2 id=&quot;the-zoo-of-signatures&quot;&gt;The Zoo of Signatures&lt;/h2&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3 id=&quot;the-lattices&quot;&gt;The lattices&lt;/h3&gt; &lt;p&gt;&lt;br /&gt; Two of the “winners” of the post-quantum process are lattice-based:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://pq-crystals.org/dilithium/&quot;&gt;Dilithium&lt;/a&gt; follows the &lt;a href=&quot;https://www.iacr.org/archive/asiacrypt2009/59120596/59120596.pdf&quot;&gt;Lyubashevsky’s Fiat–Shamir&lt;/a&gt; &lt;a href=&quot;https://eprint.iacr.org/2011/537.pdf&quot;&gt;with aborts framework&lt;/a&gt;. Its security is based on the Module-LWE assumption.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://falcon-sign.info/&quot;&gt;Falcon&lt;/a&gt; follows the &lt;a href=&quot;https://eprint.iacr.org/2007/432&quot;&gt;hash-and-sign framework of Gentry, Peikert and Vaikuntanathan&lt;/a&gt; framework. Its security is based on the hardness of the SIS Problem over NTRU lattices.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Dilithium is considered to be “simpler to implement”, but has significant bigger sizes when compared with non-post-quantum signatures. Falcon, on the other hand, has better signing and verification times, and its parameters are smaller than Dilithium (though, they are bigger than non-post-quantum signatures). Falcon also uses constant-time floating point arithmetic, which could be difficult to implement. Falcon also does not provide, as it is, the &lt;a href=&quot;https://ieeexplore.ieee.org/document/9519420&quot;&gt;“beyond unforgeability”&lt;/a&gt; security property. In terms of speed, they both seem to outperform implementations of non-post-quantum algorithms.&lt;/p&gt; &lt;p&gt;While they both seem suitable for the ‘online’ signature of a TLS 1.3 handshake (the signature of the handshake), it is unclear if they will work for the whole certificate chain (which involves many other signatures that are generated in an “offline” manner but, sometimes, verified online). Even if we put the performance time’s of the operations aside, the transmission of long parameters as part of the certificate chain can have impact on the latency of TLS connections. We are unclear on how much that impact will be noticable for end-users and if there are mechanisms that we can use to prevent it (caching, supressing intermidiates, zero-knowledge-like proofs of the whole chain, etc.). Some notes around the matter can be found &lt;a href=&quot;https://sofiaceli.com/PQNet-Workshop/tls.html&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://sofiaceli.com/slides/PQC_KEMTLS.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For other protocols, they might fail. For DNSSEC, for example, public key and signatures sizes have to be small. From the two, only Falcon’s parameters fall within the size limit needed for DNSSEC, but leaves no room for shipping more than one key/signature at a time or extra payload. For an interesting research around the matter see &lt;a href=&quot;https://www.sidnlabs.nl/downloads/7qGFW0DiOkov0vWyDK9qaK/de709198ac34477797b381f146639e27/Retrofitting_Post-Quantum_Cryptography_in_Internet_Protocols.pdf&quot;&gt;‘Retrofitting Post-Quantum Cryptography in Internet Protocols: A Case Study of DNSSEC’&lt;/a&gt; or some notes &lt;a href=&quot;https://sofiaceli.com/PQNet-Workshop/dnssec.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;There is a “simpler-to-implement” version of Falcon, &lt;a href=&quot;https://eprint.iacr.org/2021/1486.pdf&quot;&gt;Mitakaya&lt;/a&gt;, which manages to avoid floating point arithmetic in one version.&lt;/p&gt; &lt;p&gt;Recently, a very &lt;a href=&quot;https://eprint.iacr.org/2022/785.pdf&quot;&gt;interesting paper&lt;/a&gt; has been proposed to reduce the size of lattice-based signatures by sampling according to a suitably chosen ellipsoidal discrete Gaussian rather than a spherical one. This technique reduces the signature size of Falcon by 30–40%. This technique seems very interesting and a very nice avenue of research.&lt;/p&gt; &lt;p&gt;So, it seems like we might see in the future improvements to the lattice schemes.&lt;/p&gt; &lt;h3 id=&quot;the-alternative-that-got-broken-and-some-news&quot;&gt;The alternative that got broken and some news&lt;/h3&gt; &lt;p&gt;&lt;br /&gt; An interesting candidate that was part of the process was &lt;a href=&quot;https://www.pqcrainbow.org/&quot;&gt;‘Rainbow’&lt;/a&gt;, which uses a multivariate approach. It is based on the Unbalanced Oil and Vinegar (UOV) scheme. The signature size was perfect for usage in DNSSEC (and TLS 1.3) but the public key size was not able to fit a DNS packet. Unfortunately, &lt;a href=&quot;https://eprint.iacr.org/2022/214.pdf&quot;&gt;Rainbow was broken&lt;/a&gt;: the attack returns the private key after on average 53 hours (which is basically, one weekend).&lt;/p&gt; &lt;p&gt;But there is another candidate from UOV schemes: &lt;a href=&quot;https://eprint.iacr.org/2021/1144.pdf&quot;&gt;MAYO&lt;/a&gt;, which has very nice performance and sizes (bigger than non-postquantum-schemes though). This might be a nice contender in the future if its performance is improved.&lt;/p&gt; &lt;h3 id=&quot;the-mpc-ones&quot;&gt;The MPC ones&lt;/h3&gt; &lt;p&gt;&lt;br /&gt; &lt;a href=&quot;https://microsoft.github.io/Picnic/&quot;&gt;Picnic&lt;/a&gt; was a candidate for standardisation that will no longer be considered in the NIST process. It is a non-interactive zero-knowledge proof of knowledge of a private key bound to the message being signed. Its security is based on the hash function and on the security of the LowMC block cipher. There has been a lot of research on its security, which has found &lt;a href=&quot;https://eprint.iacr.org/2020/1034.pdf&quot;&gt;several&lt;/a&gt; &lt;a href=&quot;https://eprint.iacr.org/2021/1345.pdf&quot;&gt;weak points&lt;/a&gt; (listing the ones I’ve read so far, but there are more).&lt;/p&gt; &lt;p&gt;On the positive news: there is hope. Several variants of Picnic have been proposed that are based on AES. There is &lt;a href=&quot;https://eprint.iacr.org/2019/781.pdf&quot;&gt;BBQ&lt;/a&gt;, &lt;a href=&quot;https://eprint.iacr.org/2021/068.pdf&quot;&gt;Banquet&lt;/a&gt;, and &lt;a href=&quot;https://eprint.iacr.org/2021/215.pdf&quot;&gt;much&lt;/a&gt; &lt;a href=&quot;https://eprint.iacr.org/2021/692.pdf&quot;&gt;more&lt;/a&gt;. This very interesting area of research can also lead to a signature scheme with small public keys (as Picnic has).&lt;/p&gt; &lt;h3 id=&quot;the-isogenies&quot;&gt;The isogenies&lt;/h3&gt; &lt;p&gt;&lt;br /&gt; The security of isogeny schemes falls on the hardness of finding a path in the l-isogeny supersingular graph between two given vertices, which is said to be hard for both classical and quantum computers. The &lt;a href=&quot;https://eprint.iacr.org/2014/505.pdf&quot;&gt;KLPT algorithm&lt;/a&gt; (from Kohel, Lauter, Petit and Tignol) solves the quaternion analog of this problem under the Deuring correspondence. Based on it, Galbraith, Petit and Silva gave the &lt;a href=&quot;https://eprint.iacr.org/2016/1154.pdf&quot;&gt;first theoretical signature scheme&lt;/a&gt; related to isogeny graphs of supersingular elliptic curves.&lt;/p&gt; &lt;p&gt;Building on the latter, &lt;a href=&quot;https://eprint.iacr.org/2020/1240.pdf&quot;&gt;SQISign&lt;/a&gt; was proposed. The scheme has the best parameters of all the post-quantum schemes (mainly, they are small), but its performance is slow. Recently, there has been &lt;a href=&quot;https://eprint.iacr.org/2022/234.pdf&quot;&gt;efforts&lt;/a&gt; to improve its performance.&lt;/p&gt; &lt;p&gt;Isogeny-based cryptography is an active area of research. Interesting candidates might come from this area.&lt;/p&gt; &lt;h3 id=&quot;hash-based&quot;&gt;Hash-based&lt;/h3&gt; &lt;p&gt;&lt;br /&gt; There are two “types” here: schemes that maintain state (&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8391&quot;&gt;XMSS&lt;/a&gt; or &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8554&quot;&gt;LMS&lt;/a&gt;) and schemes that are state-less (&lt;a href=&quot;https://sphincs.org/&quot;&gt;SPHINCS+&lt;/a&gt;). Both types use the same security assumption: security of the underlying hash function used. The reason why there are two types is that some applications might not be able to maintain state (and need &lt;a href=&quot;https://csrc.nist.gov/publications/detail/sp/800-208/final&quot;&gt;careful consideration&lt;/a&gt; for doing so), and, hence, will benefit from using SPHINCS+. Nevertheless, SPHINCS+ has larger signature sizes.&lt;/p&gt; &lt;p&gt;Great documentation of hash-based schemes can be found &lt;a href=&quot;https://huelsing.net/wordpress/?page_id=165&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;A table of comparison of sizes: &lt;img src=&quot;/assets/comparison-pq-2.png&quot; alt=&quot;Comparison&quot; /&gt;&lt;/p&gt; &lt;p&gt;So, lots of avenues of research are still open for a post-quantum signature scheme that work on the protocols we use nowadays. Let the science begin!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: Thank you Peter Schwabe, Andreas Hülsing, Gustavo Banegas and Carsten Baum for pointing out additions needed and fixes to be made.&lt;/p&gt; </description> <pubDate>2022-07-05T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2022/07/05/pq-signatures.html</link> <guid isPermaLink="true">http://claucece.github.io//2022/07/05/pq-signatures.html</guid> </item> <item> <title>Loading times..</title> <description>&lt;p&gt;&lt;em&gt;Some loading thoughts&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Post-quantum cryptography is coming. Sometime soon, it has been said. There are many challenges in that area (some of them that we have outlined over &lt;a href=&quot;https://blog.cloudflare.com/post-quantum-taxonomy/&quot;&gt;here&lt;/a&gt;). There is, however, a big question that still pokes in my head: if post-quantum cryptography may potentially slow our connections, how slow is &lt;em&gt;too slow&lt;/em&gt; for end-users?&lt;/p&gt; &lt;p&gt;In order, to answer this question, I first wanted to dig in into how fast websites should load in 2022. My findings seem to be that ‘every second counts’. Let’s see now why.&lt;/p&gt; &lt;h2 id=&quot;faster-is-better-and-less-is-more&quot;&gt;“Faster is better and less is more”&lt;/h2&gt; &lt;p&gt;In 2017, it was &lt;a href=&quot;https://www.thinkwithgoogle.com/intl/en-ca/marketing-strategies/app-and-mobile/mobile-page-speed-new-industry-benchmarks/&quot;&gt;reported that&lt;/a&gt; “the average time it takes to fully load a mobile landing page is 22 seconds”. Yet, “53% of visits are abandoned if a mobile site takes longer than three seconds to load”. The reasons for this abandonment seem to vary, but it is still poignant to note that users still mainly remain on websites that load on the desktop rather than on mobile devices.&lt;/p&gt; &lt;p&gt;Prior to analyzing why users leave websites, we first need to understand something:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;A ‘slow’ website can be perceived as ‘fast’ by another user due to personal feelings or cultural perceptions.&lt;/li&gt; &lt;li&gt;A ‘fast’ website can be ‘fast’ for a user, as it is on a fast network with a powerful device. The same ‘fast’ website can be perceived as ‘slow’ by someone on a slow network with a not-so-powerful device.&lt;/li&gt; &lt;li&gt;A site can be perceived as loading ‘faster’ if content is progressively loaded.&lt;/li&gt; &lt;li&gt;A site can be perceived as ‘loaded-fast’ but ‘slow’ to user-interaction on it.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;br /&gt; “Historically, web performance has been measured with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;load&lt;/code&gt; event. However, even though load is a well-defined moment in a page’s lifecycle, that moment doesn’t necessarily correspond with anything the user cares about.&lt;/p&gt; &lt;p&gt;For example, a server could respond with a minimal page that “loads” immediately but then defers fetching content and displaying anything on the page until several seconds after the load event fires. While such a page might technically have a fast load time, that time would not correspond to how a user actually experiences the page loading.”, as noted &lt;a href=&quot;https://web.dev/user-centric-performance-metrics/#types-of-metrics&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Rather that relying on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;load&lt;/code&gt;, there seems to be two main user-centered metrics to take into account:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href=&quot;https://web.dev/lcp/&quot;&gt;Largest Contentful Paint (LCP)&lt;/a&gt;: measures perceived load speed as it marks the point in the page load timeline when the page’s main content has likely loaded.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://web.dev/fcp/&quot;&gt;First Contentful Paint&lt;/a&gt;: measures perceived load speed as it marks the first point in the page load timeline when the user sees anything on the screen.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;br /&gt; To provide a good user experience, sites should strive to have LCP of 2.5 seconds or less. This is roughly based on the research of &lt;a href=&quot;https://dl.acm.org/doi/10.1145/1476589.1476628&quot;&gt;Miller&lt;/a&gt; and &lt;a href=&quot;https://dl.acm.org/doi/10.1145/108844.108874&quot;&gt;Card et al&lt;/a&gt;: the amount of time a user will wait before losing focus is a range from roughly 0.3 to 3 seconds. Speed then continues to be a core vital for users to engage on a website or not. FCP needs to be fast as well (1.8 seconds or less.) as users need to be reassured that something is happening.&lt;/p&gt; &lt;p&gt;Yet, &lt;a href=&quot;https://www.thinkwithgoogle.com/intl/en-ca/marketing-strategies/app-and-mobile/mobile-page-speed-new-industry-benchmarks/&quot;&gt;as reported by Google in 2017&lt;/a&gt;, “for 70% of the pages we analyzed, it took nearly seven seconds for the visual content above the fold to display on the screen, and it took more than 10 seconds to fully load all visual content above and below the fold.” They also found that less is definitely better for website loading: “70% of pages were over 1MB, 36% over 2MB and 12% over 4MB. That’s enormous for a single mobile page, given that 1.49MB takes seven seconds to load using a fast 3G connection. One image in particular caught our attention: It weighed a whopping 16MB.”&lt;/p&gt; &lt;p&gt;Given these metrics, even my site has bad loading times (as &lt;a href=&quot;https://www.thinkwithgoogle.com/feature/testmysite/&quot;&gt;tested here&lt;/a&gt;): &lt;img src=&quot;/assets/loading.png&quot; alt=&quot;my site having bad user loading times&quot; title=&quot;My loading times&quot; /&gt;&lt;/p&gt; &lt;h2 id=&quot;does-tls-make-websites-slow-what-about-post-quantum&quot;&gt;Does TLS make websites slow? What about post-quantum?&lt;/h2&gt; &lt;p&gt;So, let’s go back to the question. The reason why we need post-quantum cryptography is due to quantum computers arrival and the &lt;a href=&quot;https://blog.cloudflare.com/quantum-solace-and-spectre/&quot;&gt;threat to cryptography they pose&lt;/a&gt;. Where are we going to mainly be using post-quantum cryptography? We will need to mainly incorporate it into TLS.&lt;/p&gt; &lt;p&gt;The good new is that today TLS is fast. Usually, the process of communicating over an encrypted channel introduces additional costs due to the increases that asymmetric and symmetric cryptographic operations introduce. Modern hardware, though, has minimized these costs. The usage of resumption mechanisms, such as “zero round trip” (0-RTT), has minimized it as well (for more explanations around the matter, see &lt;a href=&quot;https://istlsfastyet.com/&quot;&gt;this article&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Does this mean that the same will happen when we migrate TLS to post-quantum cryptography? Potentially, no. It first depends on the type of post-quantum cryptography that will be used (lattices are faster than isogenies, for example). Second, it depends on if the newly introduced cryptography will cause extra round-trips at the network layer or not. And, third, it still debated how these extra costs will impact the user-centered metrics that we just outlined.&lt;/p&gt; &lt;p&gt;So far, there has not been much research on the impact of post-quantum cryptography on end-users: will users see the web loading times that they have grown accustomed to degrade?, will users care if the loading time is slightly increased?, will it be more visible on the mobile experience?&lt;/p&gt; &lt;p&gt;I’m now seeking to explore more on these questions, as well as the understanding of metrics that take the user experience into account, as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;load&lt;/code&gt; metrics seem to not be enough.&lt;/p&gt; </description> <pubDate>2022-03-12T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2022/03/12/loading.html</link> <guid isPermaLink="true">http://claucece.github.io//2022/03/12/loading.html</guid> </item> <item> <title>Women in science groups</title> <description>&lt;p&gt;&lt;em&gt;Hear me as a woman. Have me as your sister.&lt;/em&gt; -Amanda Gorman&lt;/p&gt; &lt;p&gt;Here, I’ll like to have this place to list some of the amazing women in science groups that help with supporting women, and creating inclusive and diverse environments. I’ll try to update this list regularly:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://www.ietf.org/about/groups/ietf-systers/&quot;&gt;IETF Systers&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.wiqd.nl/&quot;&gt;Women in Quantum Development&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.athenasangels.nl/en/angels-alerts&quot;&gt;Angel Alerts&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://womeninnumbertheory.org/&quot;&gt;Women in number theory&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://simons.berkeley.edu/workshops/women-theory&quot;&gt;Women in Theory 2021&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; Soon, there will be a women in cryptography group ;)&lt;/p&gt; &lt;p&gt;Some first-hand experiences of discrimination and their impacts:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://blog.qutech.nl/2022/03/08/i-didnt-know-that-we-allowed-whores-in-the-lab/&quot;&gt;“I didn’t know that we allowed whores in the lab”&lt;/a&gt; by Anne-Marije Zwerver&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://sites.google.com/site/numberlandadventures/&quot;&gt;Alice’s Adventures in Numberland&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=F469X3NJnys&amp;amp;ab_channel=TAUVOD&quot;&gt;The Consequences of Under representation in Cybersecurity&lt;/a&gt; by Prof. Allison Bishop&lt;/li&gt; &lt;/ul&gt; </description> <pubDate>2022-03-09T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2022/03/09/women-groups.html</link> <guid isPermaLink="true">http://claucece.github.io//2022/03/09/women-groups.html</guid> </item> <item> <title>1:1s and management</title> <description>&lt;p&gt;&lt;em&gt;Why I love good 1:1s&lt;/em&gt;&lt;/p&gt; &lt;p&gt;These days, I’ve been reflecting. Reflecting on the status of the world, research, and many other things. On the work side, I’ve been reflecting on how to properly run teams and how to make people be heard. I’m no expert on this and, while I do have some management and leadership experience, I have lots of things to learn. I have managed/lead 3 teams now of various sizes. My first experience with managing a team was a disaster: I failed in every way. But I’ve learned to do better. Here, I’ll like to share things that I’ve learned, books and advice that have helped me, and how to add diversity and inclusion into managing. What I will mostly like to focus in this blog post are 1:1s and why they are a central core to any team dynamic. I’ll be talking about my experience over the years as a member of the software community. Recently, I led (in a small way) a team of people that I absolutely loved. So here some of my reflections.&lt;/p&gt; &lt;h2 id=&quot;11s&quot;&gt;1:1s&lt;/h2&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;We all know that 1:1s are, we all have had them. But sometimes we don’t know what a &lt;em&gt;good&lt;/em&gt; 1:1 is. For me, 1:1s are an opportunity to learn what are the successes, challenges and needs of a person. It is not a status update or reporting. It is the most vital process that a manager/lead must always held.&lt;/p&gt; &lt;p&gt;I had once a manager/lead that wanted to cancel all their 1:1s in the team, or to reduce them to 15 minutes. They had too many other things to do and other important meetings to attend. I also had a leader that canceled all of our 1:1s. This leader first started by canceling our 1:1 by sending a note over chat; then, they cancel them by sending an email; then, they cancel by clicking ‘no’ to the video invitation; and, then, they just removed it with no notification from the calendar. These two examples, at least for me, are a big mistake. What these two examples said to me was: “I, as a manager/lead, do not value your work, and see no use in talking to you”.&lt;/p&gt; &lt;p&gt;1:1s are perhaps the most important meeting one can have in order to understand the health and the needs of a team. You cannot understand what a person needs from second-hand telling, assumptions or gossip. You need to go to the source to understand any need. And, yet, 1:1s are the types of meetings that are more likely to be canceled.&lt;/p&gt; &lt;p&gt;Perhaps, the reason why they get canceled is that there is a misunderstanding of what they are for. 1:1s are not status or report meetings. Status can be the introduction or the framing, but not the core of the meeting. A healthy 1:1 is strategic: they must be valuable conversations.&lt;/p&gt; &lt;p&gt;1:1s are about moving information in such a way that that communication becomes helpful. If you, as a manager, expect to go to a 1:1 and that an employee just recites what they have been doing all week, then that meeting is useless. It is useless for the employee as not help has been given, it is just a repetition of a task. This is also the reason why I hate status reports.&lt;/p&gt; &lt;p&gt;From “Managing Humans” by Michael Lopp:&lt;/p&gt; &lt;p&gt;      “My belief is that e-mail-based status reports are one of the clearest and best signs of managerial incompetence and laziness. There are always compelling reasons why you need to generate these weekly e-mails. &lt;em&gt;We’re big enough that we need to cross-pollinate. It’s just 15 minutes of your time&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;Bullshit. The presence of rigid, e-mail-based status reports comes down to control, a lack of imagination, and a lack of trust in the organization.&lt;/p&gt; &lt;p&gt;I want you to count the number of collaboration tools you use on a daily basis to do your job—not including e-mail. If you’re a software engineer, I’m guessing it’s a combination of version control, bug tracking, wikis, CRM, Slack, and/or project management software. All of these tools already automatically generate a significant amount of status regarding what has tactically gone down each week.&lt;/p&gt; &lt;p&gt;When someone—my boss or someone who outranks me—asks for a status report, my first thought is, “I’m already generating piles of status on these various tools; why not just look at those?”&lt;/p&gt; &lt;p&gt;&lt;em&gt;Well, there’s a lot of noise in those tools.&lt;/em&gt; So write a report that takes out the noise—collaboration tools are built around reporting. The status information is out there. In what managerial textbook does it say it’s a good idea to distribute the task of figuring out what is going on to the people who are performing the work? That’s, like, your job.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Well, what I really want is your high-level assessment of the week. Three things that are working, three things that aren’t, and what we’re going to do about it.&lt;/em&gt; OK, now we’re talking. I can do a strategic assessment of the week, but why don’t we just put that at the beginning of the one-on-one? That way when you have questions (and you will), we can have a big fat debate.&lt;/p&gt; &lt;p&gt;&lt;em&gt;But I’d like to have a record I can review later.&lt;/em&gt; Super, feel free to write down anything we talk about.&lt;/p&gt; &lt;p&gt;Yes, status reports are a hot button for me. I’ve written hundreds of them and each time I’ve begun one, I start by thinking, “Why in the world do I feel like I’m performing an unnecessary act?” Status reports usually show up because a distant executive feels out of touch with part of his or her organization, and they believe getting everyone to efficiently document their week is going to help. It doesn’t. E-mailed status reports say one thing to 90 percent of the people who write them: “You don’t value my time.””&lt;/p&gt; &lt;p&gt;I whole-heartedly agree with the quoted text. When I go to 1:1s with people I mentor/lead/manage, I usually come prepared. I already know they have been working on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x&lt;/code&gt; feature because I reviewed the PR or saw it. I already know they are interested in working on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x&lt;/code&gt; because they said so in a team meeting or in a chat. I have ways to find the information of what they have been doing by looking at jira tickets, attending project meetings, reading git commits, opening the slides of their presentations, and more. And, even if I don’t have all the information, I trust my colleagues to do the right work. I don’t need to micromanage anyone and I don’t need them to repeat statuses for me. Those statuses found on jiras or more, though, provide me with valuable information to discuss in our 1:1.&lt;/p&gt; &lt;p&gt;I usually write down the things I want to discuss in the 1:1s. They involve either coding together a solution, discussing the comments on a PR, figuring our together how to run a meeting, finding the strategy to move some work forward, and more. And, more importantly, they also involve finding opportunities. If a person casually says on chat or in a meeting that they are interested in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x&lt;/code&gt; project, then, I usually try to dig more. How interested are they? Is there a paper around that project they would be interested in that I can share? Is there a person I can introduce them to? Is there a conference they can attend?&lt;/p&gt; &lt;p&gt;A 1:1 is also the place for me to share information that they might not know. This might include the strategy of a project or the overall goals of a new line of projects that are coming. This is very important because in the absence of information, people start making up this information. And, worse, if they feel threatened, they make up information that amplifies their worst fears. So, it is important to state information clearly, especially, strategic one.&lt;/p&gt; &lt;p&gt;1:1 should be about creating meaningful conversations. And sometimes, it becomes a vent. Something went wrong and people needed to vent. That is ok, the job here is to listen and not to advice (yet). Let the vent pass, and then you can start finding solutions. But, if you don’t listen first, people will think you are not taking them seriously or that you are just there to shut them down. I have had these conversations and I have had to stay silent watching someone take it all out of their chest. But only when the vent is finished, one can start talking, because only then is all out. I have also vented in the past to managers and I think we all have had.&lt;/p&gt; &lt;p&gt;The worst kind of 1:1 is, as Lopp says, the Disaster.&lt;/p&gt; &lt;p&gt;      “Here are some tips on recognizing and handling the Disaster:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The person you’re talking to isn’t him- or herself. As you’re sitting there weathering the Disaster, remember that you are experiencing an anomaly—a bizarre emotional version of the person that only shows up when they’re on the edge. The person you’re familiar with will show up . . . eventually.&lt;/li&gt; &lt;li&gt;Shut up. Really. Your primary job during the Disaster is to defuse, and you start defusing by contributing absolutely nothing. If you’re a logical, reasonable management type, you’ll be tempted to ask clarifying questions—to try to shape the problem. Don’t. Be quiet. Let the emotion pass. Here’s why . . .&lt;/li&gt; &lt;li&gt;It’s not about the issue anymore. You’re no longer experiencing the problem. You’re experiencing the employee’s emotional baggage regarding the problem. Sure, there’s the core issue, but that’s not what you’re currently observing. You’re seeing the extreme negative reaction to the issue, and that’s the first order of business.”&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; A disaster, though, is the result of poor management. “When your employee believes totally losing their shit is a productive strategy, it’s because they believe it’s the only option left for making anything change” (Lopp). And, most of the times, they believe is the last option they have.&lt;/p&gt; &lt;p&gt;I have had two memorable disaster 1:1s. On the first, I failed to listen and I failed to see my mistake. The employee resigned and I felt terrible. I later apologized (not once, but at least five times on different occasions) and now we are good friends. On the second, I listened and provided support. I couldn’t solve his problem: getting a much-deserved raise, because it was out of my control. But I tried, and showed him how much I tried. A disaster 1:1 can be recovered, but one needs to listen and provide actual support. A disaster is usually the result of miscommunication, so: “when communications are down, listen hard, repeat everything, and assume nothing” (Lopp).&lt;/p&gt; &lt;p&gt;1:1s are also the time to understand what someone wants, what is their core motivation. Do they want to lead? Do they want to be a team player? Do they want to only do technical work? Not all people are you, and you will need to learn who they are. A good way I use for this is to understand what kind of jokes they like, what makes them tickle. This usually allows me to start understanding them, and makes for a great way to break any tension.&lt;/p&gt; &lt;p&gt;1:1s are also a place to understand the health of a team. If people are not talking about their important matters on their 1:1s, then, they don’t trust you. If you don’t actually listen to them, cancel their 1:1s, micromanage their work, and provide no support, people will not trust you. And people need to trust you.&lt;/p&gt; &lt;p&gt;It is also very important to believe whomever you are managing. This doesn’t mean believing them blindly; but if they brought up a topic up in a 1:1 (a meeting that can be scary), then they actually felt like they needed to say something. Don’t treat it lightly and do believe them. This is especially important when talking about diversity and inclusion.&lt;/p&gt; &lt;p&gt;I remember once I had the experience of having an idea and that a male member took credit for it. This is particularly important for me as a woman, as women are less recognized for the work they do and their contributions are usually diminished. I brought this to the attention of a manager who didn’t believe me and provided no support. There was no response plan and no prevention of recurrence. I lost my trust in that manager. Listen in 1:1s, understand your inner biases, seek to see other points of view, and take seriously instances where inclusion is being diminished.&lt;/p&gt; &lt;p&gt;I actually really like managing because I like people and I’ve loved everyone I have mentored/lead/managed. I also see it as mental chess: trying to figure out what the next steps will be. But it is not an easy job: “my definition of a great manager is someone with whom you can make a connection no matter where you sit in the organization chart” (Lopp).&lt;/p&gt; &lt;p&gt;Things I personally value in managers (and that I try to do when mentoring or leading):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Someone that knows what I’m doing, trusts that I do it well and that helps me if I get stuck.&lt;/li&gt; &lt;li&gt;Someone that does not hold my academic titles against me, and that knows that I’m technically capable (because women are often regarded as less technically capable than men).&lt;/li&gt; &lt;li&gt;Someone that listens carefully, and specially listens to what I’m asking help for. Many times, one asks for help on one thing and it is assumed to be another.&lt;/li&gt; &lt;li&gt;Someone that values inclusion, mental-health help, and diversity.&lt;/li&gt; &lt;li&gt;Someone that works on their inner biases and learns about systematic discrimination.&lt;/li&gt; &lt;li&gt;Someone that celebrates wins with me.&lt;/li&gt; &lt;li&gt;Someone that tries to understand team members beyond work.&lt;/li&gt; &lt;li&gt;Someone that finds a way to give feedback that I feel comfortable with.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; Some resources that might help you:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/11DoQ-Bhvs5mfRwB0Bz6OHwoChhFVK7u_KqlbFgR-ezY/edit#gid=0&quot;&gt;Interview Questions to ask as a candidate&lt;/a&gt; by the great Sarai Rosenberg.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://jvns.ca/blog/2013/12/30/questions-im-asking-in-interviews/&quot;&gt;Questions I’m asking in interviews&lt;/a&gt; by Julia Evans.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://chelseatroy.com/2018/05/04/questions-for-prospective-managers/&quot;&gt;Questions for Prospective Managers&lt;/a&gt; by Chelsea Troy.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/1430243147&quot;&gt;Managing Humans&lt;/a&gt; by Michael Lopp.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.bookdepository.com/Management-3.0-Jurgen-Appelo/9780321712479?redirected=true&amp;amp;utm_medium=Google&amp;amp;utm_campaign=Base1&amp;amp;utm_source=PT&amp;amp;utm_content=Management-3.0&amp;amp;selectCurrency=EUR&amp;amp;w=AF7DAU9SF7XBYKA8V3Y4&amp;amp;gclid=Cj0KCQiAmpyRBhC-ARIsABs2EAoEmWp7HB2p4BPv8dMtH24XJoMNkR1AGIi5yT9MlYasmnictgzvTRAaAqzzEALw_wcB&quot;&gt;Management 3.0&lt;/a&gt; by Jurgen Appelo&lt;/li&gt; &lt;li&gt;The advice of a manager/lead/mentor you loved working with.&lt;/li&gt; &lt;/ul&gt; </description> <pubDate>2022-03-08T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2022/03/08/management-one-one.html</link> <guid isPermaLink="true">http://claucece.github.io//2022/03/08/management-one-one.html</guid> </item> <item> <title>Understanding Modern Number Theory: Divisibility</title> <description>&lt;p&gt;&lt;em&gt;God may not play dice with the universe, but something strange is going on with the prime numbers.&lt;/em&gt; — Paul Erdos&lt;/p&gt; &lt;p&gt;I always liked mathematics and logic. During my undergrad degree I spent hours devouring anything written by Wittgenstein, and finding about Cantor and Gödel (in contrast to my high school years in which I obsessed with Nietzsche and Camus, and even read the whole ‘Phenomenology of the Spirit’ by Hegel to see where Nietzsche was coming from)&lt;sup&gt;&lt;a href=&quot;#foot1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. I also read anything from Jorge Luis Borges as his literature writing touch upon some mathematical concepts, while also deeply loving the way Borges writes. At the end, I studied them from a more philosophical perspective, as my degree was touching upon that, but I always dreamt on studying mathematics.&lt;/p&gt; &lt;p&gt;Getting access to these books and articles from these authors and more was always difficult as I didn’t have any money to buy them, so I spent hours in public libraries reading them. Some books also never reached my country, Ecuador, so sometimes I had to find the only copy in the country that some professor had and ask them to lend them to me for a time. I remember that once I wanted to read an specific book by Derrida and I found that one professor had it but in it’s original french. My french is not the best but I succeeded in reading it, even when Derrida plays with the french language and basically deconstructs it. I’m also a woman, so sometimes I had to hide that I was reading something as ‘women are not supposed to read that’.&lt;/p&gt; &lt;p&gt;Some weeks ago, I had a very nice call with Steven Galbraith, and my interest for mathematics got renewed. So I decided to do what I do best: find books and read them.&lt;/p&gt; &lt;p&gt;The subsequent posts I will writing are the results of me reading &lt;strong&gt;‘A Classical Introduction to Modern Number Theory’&lt;/strong&gt; by Kenneth Ireland and Michael Rosen, &lt;strong&gt;‘An Introduction to the Theory of Numbers’&lt;/strong&gt; by Ivan Nevin, Herbert S. Zuckerman and Hugh L. Montgomery, and &lt;strong&gt;‘Introduction to Automata Theory, Languages and Computation’&lt;/strong&gt; by John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman. In the future, I’ll be also reading &lt;strong&gt;‘Logical Foundations of Proof Complexity’&lt;/strong&gt; by Stephen Cook, &lt;strong&gt;‘Solved and Unsolved Problems in Number Theory’&lt;/strong&gt; by Daniel Shanks, &lt;strong&gt;‘The Arithmetic of Elliptic Curves’&lt;/strong&gt; and &lt;strong&gt;‘Advanced Topics in the Arithmetic of Elliptic Curves’&lt;/strong&gt; by Joseph H. Silverman.&lt;/p&gt; &lt;p&gt;As the book &lt;strong&gt;‘A Classical Introduction to Modern Number Theory’&lt;/strong&gt; states, “L. Kronecker once remarked (speaking of mathematics generally) that God made the natural numbers and all the rest is the work of man”. Number Theory is precisely the study of natural numbers, also called the positive integers (although, some definitions begin the natural numbers with the ‘0’). Properties of these numbers have been studied for a very long time, and today we will be looking at divisibility.&lt;/p&gt; &lt;p&gt;A number &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a&lt;/code&gt;, not zero, is said to divide another &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt; if there is a number &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt; such that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b = ac&lt;/code&gt;. We write this: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt;. &lt;br /&gt; For example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a = 3&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b = 6&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6 = 3 * 2&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;This simple definition of division can be further examined by listing it’s properties:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt; implies &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|bc&lt;/code&gt; for any integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt;,&lt;/li&gt; &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b|c&lt;/code&gt; imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|c&lt;/code&gt;,&lt;/li&gt; &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|c&lt;/code&gt; imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|(bx + cy)&lt;/code&gt; for any integers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;y&lt;/code&gt;,&lt;/li&gt; &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b|a&lt;/code&gt; imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a = ±b&lt;/code&gt;,&lt;/li&gt; &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a &amp;gt; 0&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b &amp;gt; 0&lt;/code&gt;, imply &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a ≤ b&lt;/code&gt;,&lt;/li&gt; &lt;li&gt;if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;m ≠ 0&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a|b&lt;/code&gt; implies and is implied by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ma|mb&lt;/code&gt;.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;All of these properties are a theorem and should be proven, as they have already in the past. Why is a proof important? A proof is a inferential argument&lt;sup&gt;&lt;a href=&quot;#foot2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; showing that an assumption logically guarantees a conclusion. Sometimes just finding an example is enough to provide a proof of a theorem, for example: “there is a positive number that is not the sum of three squares” can be proven by noting that 7 is such a number. But other statements are harder to proof.&lt;/p&gt; &lt;p&gt;In software programming, one might say that is enough to run a program to see that it works: but, most of the times, you cannot run a program on every possible input that will be given. That is why proofs are needed.&lt;/p&gt; &lt;p&gt;There are many methods for providing a proof: direct proof, proof by contradiction, proof by contraposition, proof by construction, inductive proofs and more.&lt;/p&gt; &lt;p&gt;Returning to the idea of divisibility: If we are given a number, it is tempting to factor it again until further factorization is impossible. Numbers that cannot be factored any further are called primes. An integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;p &amp;gt; 1&lt;/code&gt; is a prime number in case there is no divisor &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt; of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;p&lt;/code&gt; satisfying &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1 &amp;lt; d &amp;lt; p&lt;/code&gt;. If an integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a &amp;gt; 1&lt;/code&gt; is not a prime, it is called a composite.&lt;/p&gt; &lt;p&gt;When one looks at primes one can ask: can every even number greater than 2 be written as the sum of two primes? This is known as the Goldbach conjecture, which has not yet been proven. This problem belongs to the ‘additive’ problems around primes, but we must look at another problem in the ‘multiplicative’ ones that has been proven:&lt;/p&gt; &lt;h2&gt;Theorem&lt;/h2&gt; &lt;p&gt;Every integer greater than 1 can be expressed as a product of primes.&lt;/p&gt; &lt;h2&gt;Proof&lt;/h2&gt; &lt;p&gt;If the given integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; is a prime, then the integer itself stands as a product with a single factor.&lt;/p&gt; &lt;p&gt;If the given integer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; is not a prime, then it can be factored into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n_1 * n_2&lt;/code&gt;. If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n_1&lt;/code&gt; is not a prime, then it can be factored into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n_3 * n_4&lt;/code&gt;. The same for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n_2&lt;/code&gt;. This process of writing each composite as a product of factors will end at some point when the factors are smaller than the composite itself, and each factor is an integer greater than 1.&lt;/p&gt; &lt;p&gt;We can provide a proof by contradiction for this as well:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;We rewrite the statement as ‘If an integer is greater than 1 then it can be expressed as a product of primes’.&lt;/li&gt; &lt;li&gt;We construct the contradiction (“H and not C implies falsehood”): ‘If an integer is greater than 1 then it cannot be expressed as a product of primes’.&lt;/li&gt; &lt;li&gt;Define &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;N = an integer greater than 1 that cannot be expressed as product of primes&lt;/code&gt;. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;N&lt;/code&gt; cannot be a prime, as it will stand as a product with a single factor. Therefore &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;N = n*m&lt;/code&gt;, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;m&lt;/code&gt; are positive and smaller than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;N&lt;/code&gt;. As either &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;m&lt;/code&gt; is bigger than 1, then it should be expressed as a product. This arrives to a contradiction.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; Canonically, this can be worded as:&lt;/p&gt; &lt;center&gt; Every positive integer n &amp;gt; 1 can be represented in exactly one way as a product of prime powers: &lt;/center&gt; &lt;p&gt;&lt;img src=&quot;https://wikimedia.org/api/rest_v1/media/math/render/svg/22f8cf10ecd16a6f7dc6d97338d84be9c369a3f7&quot; /&gt;&lt;/p&gt; &lt;p&gt;The representation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; as a product of primes is called the canonical factoring of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;n&lt;/code&gt; into prime powers. Gauss was the first to provide a proof for this, and it is defined as the fundamental theorem of arithmetic. Notably in algebraic number theory, unique factorization fails to hold. An example of this can be easily seen in this example:&lt;/p&gt; &lt;p&gt;Let’s consider &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;S&lt;/code&gt; the class of positive integers (2, 4, 6, 8, 10…) and only those. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;S&lt;/code&gt; is a multiplicative system in that the product of any two elements on it is found on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;S&lt;/code&gt; as well. Then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8 = 4 * 2&lt;/code&gt; is a “composite”, as the factors exist in the group; on the contrary, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10&lt;/code&gt; is a “prime” as there are no factors on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;S&lt;/code&gt; that factor it. The number 60 has two factorings into “primes”: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;60 = 2 * 30&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;60 = 6 * 10&lt;/code&gt;. Factorization is, therefore, not unique in this case. This can be extended to other classes as well.&lt;/p&gt; &lt;p&gt;This is an small summary of reading the first chapters of the listed books. Up next, we will look more at unique factorization, the binomial theorem. We will also look at Finite Automata on a different post.&lt;/p&gt; &lt;h2 id=&quot;fascinating-things-i-learned&quot;&gt;Fascinating things I learned&lt;/h2&gt; &lt;p&gt;&lt;br /&gt; If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g&lt;/code&gt; is the greatest common divisor of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt;, then there exists integers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x_0&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;y_0&lt;/code&gt; such that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g = (b, c) = bx_0 + cy_0&lt;/code&gt;, which means that the g.c.d of two integers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt; is expressible as a linear combination of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt; with integral multipliers &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x_0&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;y_0&lt;/code&gt;. This is simply beautiful.&lt;/p&gt; &lt;hr /&gt; &lt;p id=&quot;foot1&quot; style=&quot;font-size: 16px;&quot;&gt;[1] My high school was a really catholic opus-dei one, and we were forbidden of reading anything Nietzsche-Sartre-Camus-Marx-like. As a rebel I was, I read them all.&lt;/p&gt; &lt;p id=&quot;foot2&quot; style=&quot;font-size: 16px;&quot;&gt;[2] As defined by Aristotle by either using induction or deduction. Pierce provided a third type of inference &apos;abduction&apos;.&lt;/p&gt; </description> <pubDate>2021-03-05T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2021/03/05/unique-factorization.html</link> <guid isPermaLink="true">http://claucece.github.io//2021/03/05/unique-factorization.html</guid> </item> <item> <title>KEMTLS and Cloudflare: designing and implementing for the real world</title> <description>&lt;p&gt;&lt;em&gt;Running post-quantum experiments&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This article has also been posted to &lt;a href=&quot;https://thomwiggers.nl/talk/post-quantum-tls-without-handshake-signatures-at-rwc-2021/&quot;&gt;Thom Wiggers’s blog&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Fundamentally, the Transport Layer Security protocol (TLS), which secures most of the Internet connections, has mainly been a key exchange authenticated by digital signatures&lt;sup&gt;&lt;a href=&quot;#foot1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. Even though it has undergone major changes since 1994, when SSL 1.0 was introduced by Netscape, it’s main mechanism has remained the same. The key exchange that is used was first based on RSA and later on (elliptic curve) Diffie-Hellman. The signatures used for authentication have almost always been RSA-based, though in recent years other kinds of signatures have been adopted, mainly ECDSA and Ed25519. This recent change to elliptic curve cryptography at both at a key exchange and signature level has resulted in considerable speed and bandwidth benefits in comparison to classic Diffie-Hellman and RSA.&lt;/p&gt; &lt;p&gt;TLS is the main protocol that protects the connections we use everyday. It is everywhere: it is used when we buy products online, when we register for a newsletter or when we access any kind of website. But, with the imminent threat of &lt;a href=&quot;https://blog.cloudflare.com/securing-the-post-quantum-world/&quot;&gt;the arrival of quantum computers&lt;/a&gt; (a threat that seems to be getting closer and closer), we need to reconsider again the future of TLS. &lt;a href=&quot;https://blog.cloudflare.com/the-tls-post-quantum-experiment/&quot;&gt;A wide-scale post-quantum experiment&lt;/a&gt; was carried out by Cloudflare and Google: two post-quantum key exchanges were integrated into Cloudflare’s TLS stack and deployed at their edge servers and in Chrome Canary clients. The goal of that experiment was to evaluate the performance and feasibility of deployment of two post-quantum key exchanges in TLS.&lt;/p&gt; &lt;p&gt;Similar experiments have been proposed for introducing post-quantum algorithms into the TLS handshake itself. Unfortunately it seems infeasible to replace both the key exchange and signature with post-quantum primitives as post-quantum cryptographic primitives are bigger, or slower (or both) than their predecessors. The proposed algorithms under consideration in the &lt;a href=&quot;https://csrc.nist.gov/Projects/post-quantum-cryptography/round-3-submissions&quot;&gt;NIST post-quantum standardization process&lt;/a&gt; use larger mathematical objects than what is used for elliptic curves, traditional Diffie-Hellman or RSA. As a result, the size of public keys, signatures and key exchange material is much bigger than those from elliptic curves, Diffie-Hellman or RSA.&lt;/p&gt; &lt;p&gt;How can we solve this problem? How can we use post-quantum algorithms as part of the TLS handshake without making the material too big to be transmitted? In this blogpost, we will introduce a new mechanism for making this happen, explain how it can be integrated into the TLS 1.3 handshake and talk about implementation details. The key observation in this mechanism is that, while post-quantum algorithms have bigger communication size than their predecessors, post-quantum &lt;strong&gt;key exchanges&lt;/strong&gt; have somewhat smaller sizes than post-quantum &lt;strong&gt;signatures&lt;/strong&gt;, so we can try to replace signatures with key exchanges in some places to save space. We will only focus on the TLS 1.3 handshake as it is the TLS version that should be currently used.&lt;/p&gt; &lt;h2 id=&quot;the-past-experiments-making-the-traditional-tls-13-handshake-post-quantum&quot;&gt;The past experiments: making the traditional TLS 1.3 handshake post-quantum&lt;/h2&gt; &lt;p&gt;&lt;a href=&quot;https://tools.ietf.org/html/rfc8446&quot;&gt;TLS 1.3&lt;/a&gt; was introduced in August 2018 with many security and performance improvements (notably, having only one round-trip to complete the handshake). But TLS 1.3 is designed for a world with classical computers, and some of its functionalities will be broken by quantum computers when they arrive.&lt;/p&gt; &lt;p&gt;The primary goals of TLS 1.3 are to provide authentication (the server side of the channel is always authenticated, the client side is optionally authenticated), confidentiality and integrity by using a handshake protocol and a record protocol. The handshake protocol, the one of interest for us today, establishes the cryptographic parameters for securing and authenticating a connection. It can be thought of as of having three main phases, as defined in &lt;a href=&quot;https://tools.ietf.org/html/rfc8446&quot;&gt;RFC8446&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;The &lt;strong&gt;Parameter Negotiation&lt;/strong&gt; phase (referred to as ‘Server Parameters’ in RFC8446), which establishes some handshake parameters (whether the client is authenticated, application-layer protocol support, etc).&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;The &lt;strong&gt;Key Exchange&lt;/strong&gt; phase, which establishes shared keying material and selects the cryptographic parameters to be used. Everything after this phase will be encrypted.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;The &lt;strong&gt;Authentication&lt;/strong&gt; phase, which authenticates the server (and, optionally, the client) and provides key confirmation and handshake integrity.&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; The main idea of past experiments that introduced post-quantum algorithms into the handshake of TLS 1.3 was to use them in place of classical algorithms by advertising them as part of the &lt;a href=&quot;https://tools.ietf.org/html/rfc8446#section-4.2.7&quot;&gt;supported groups&lt;/a&gt; (an extension used by the client to indicate which named groups -Elliptic Curve Groups, Finite Field Groups- it supports for key exchange) and &lt;a href=&quot;https://tools.ietf.org/html/rfc8446#section-4.2.8&quot;&gt;key share&lt;/a&gt; (an extension which contains the endpoint’s cryptographic parameters) extensions, and, therefore, establishing with them the negotiated connection parameters. Key encapsulation mechanisms (KEMs) are an abstraction of the basic key exchange primitive and were used to generate the shared secrets. In the case of using a &lt;a href=&quot;https://tools.ietf.org/html/rfc8446#section-4.2.11&quot;&gt;pre-shared key&lt;/a&gt;, its symmetric algorithms can be easily replaced by post-quantum KEMs, as well; and, in the case of password-authenticated TLS, there has been some &lt;a href=&quot;https://eprint.iacr.org/2017/1192.pdf&quot;&gt;proposed ideas&lt;/a&gt; on how to use post-quantum algorithms with them.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;/images/tls.png&quot; alt=&quot;TLS and PQKEMs&quot; /&gt;&lt;/p&gt; &lt;p&gt;Most of the above ideas only provide what is often defined as ‘transitional security’, as its main focus is providing quantum-resistant confidentiality, but do not take into account quantum-resistant authentication. The idea of using post-quantum signatures for TLS authentication is possible, but the sizes of post-quantum signatures are larger than traditional ones. Furthermore, it is worth noting that using &lt;a href=&quot;https://csrc.nist.gov/Presentations/2019/the-2nd-round-of-the-nist-pqc-standardization-proc&quot;&gt;post-quantum signatures is much heavier than using post-quantum KEMs&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;We can estimate the impact of such a replacement on network traffic by simply looking at the sum of the cryptographic objects that are transmitted during the handshake. In a typical TLS 1.3 handshake using elliptic curve X25519 and RSA-2048, such a handshake would transmit 1376 bytes corresponding to: the public keys for key exchange, the certificate, the signature of the handshake, and the certificate chain. If we were to replace X25519 by the post-quantum KEM &lt;a href=&quot;https://pq-crystals.org/kyber/&quot;&gt;Kyber512&lt;/a&gt; and RSA by the post-quantum signature &lt;a href=&quot;https://pq-crystals.org/dilithium/&quot;&gt;Dilithium II&lt;/a&gt;, two of the more efficient proposals, the size of the transmitted data would increase to 10036&lt;sup&gt;&lt;a href=&quot;#foot2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; bytes. This increase is mostly due to the size of the post-quantum signature algorithm.&lt;/p&gt; &lt;p&gt;The question then is: how can we achieve full post-quantum security and create a handshake that is efficient to be used?&lt;/p&gt; &lt;h1 id=&quot;a-more-efficient-proposal-kemtls&quot;&gt;A more efficient proposal: KEMTLS&lt;/h1&gt; &lt;p&gt;There is a long history of other mechanisms, besides signatures, being used for authentication. Modern protocols, such as the Signal protocol, the Noise framework or WireGuard, rely on key exchange mechanisms for authentication, which are somewhat unsuitable for the TLS 1.3 case as they expect the long-term key material to be known in advance by the interested parties.&lt;/p&gt; &lt;p&gt;The &lt;a href=&quot;https://eprint.iacr.org/2015/978.pdf&quot;&gt;OPTLS proposal&lt;/a&gt; by Krawczyk and Wee authenticates the TLS handshake without signatures by using a non-interactive key exchange (NIKE). However, the only somewhat efficient construction for a post-quantum NIKE is CSIDH, the security of which is the subject of ongoing debate. But, we can build on this idea by using KEMs for authentication. KEMTLS, the current proposed experiment, replaces the handshake signature by a post-quantum KEM key exchange. It was designed and introduced by Peter Schwabe, Douglas Stebila and Thom Wiggers in the publication &lt;a href=&quot;https://thomwiggers.nl/publication/kemtls/kemtls.pdf&quot;&gt;‘Post-Quantum TLS Without Handshake Signatures’&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;KEMTLS, therefore, achieves the same goals as TLS 1.3 (authentication, confidentiality and integrity) in the face of quantum computers. One small difference compared to the TLS 1.3 handshake is that KEMTLS allows the client to send encrypted application data since the second client-to-server TLS message flow when client authentication is not required, and in the third client-to-server TLS message flow when mutual authentication is required. Note that with TLS 1.3 the server is able to send encrypted and authenticated application data in its first response message (although, in most uses of TLS 1.3, this feature is not actually used). With KEMTLS, then, when client authentication is not required, the client is able to send its first encrypted application data after the same amount of handshake round trips as in TLS 1.3.&lt;/p&gt; &lt;p&gt;Intuitively, the handshake signature in TLS 1.3 proves possession of the private key corresponding to the public key certified in the TLS 1.3 server certificate. For these signature schemes, this is the straightforward way to prove possession; but it’s also possible to make such proof through key exchanges. By carefully considering the key derivation sequence, only the server holding the private key that corresponds to the certified public key can decrypt any messages sent by the client to the server. Therefore, implicit authentication is fulfilled. It is worth noting that KEMTLS still relies on signatures by certificate authorities to authenticate the long-term KEM keys.&lt;/p&gt; &lt;p&gt;As said, KEMTLS’ application data transmitted during the handshake is implicitly, rather than explicitly authenticated (as in TLS 1.3), and has slightly weaker downgrade resilience and forward secrecy; but full downgrade resilience and forward secrecy is achieved once the KEMTLS handshake completes.&lt;/p&gt; &lt;div class=&quot;post-box&quot;&gt; &lt;img src=&quot;/images/traditional_tls.png&quot; alt=&quot;TLS 1.3 Handshake&quot; style=&quot;height:700px;&quot; /&gt; &lt;img src=&quot;/images/pq_tls.png&quot; alt=&quot;KEMTLS Handshake&quot; style=&quot;height:600px;&quot; /&gt; &lt;/div&gt; &lt;p style=&quot;font-size: 18px; text-align: right; margin-right: 50px;&quot;&gt;Comparison of both handshakes: Classic TLS 1.3 one (left), KEMTLS one (right)&lt;/p&gt; &lt;p&gt;By replacing the handshake signature by a KEM key exchange, we reduce the size of the data transmitted in the example handshake using Kyber512 and Dilithium II to 8344 bytes, a significant reduction. Even for algorithms, such the NTRU-assumption based KEM NTRU and signature algorithm Falcon, that have a less-pronounced size gap, we still reduce bytes. KEM operations are typically computationally much lighter than signing operations as well, which makes the reduction even more significant.&lt;/p&gt; &lt;p&gt;KEMTLS was presented at ACM CCS 2020. You can read more about its details in the &lt;a href=&quot;https://thomwiggers.nl/publication/kemtls/kemtls.pdf&quot;&gt;paper&lt;/a&gt;. It was initially implemented in the &lt;a href=&quot;https://github.com/thomwiggers/kemtls-experiment&quot;&gt;RustTLS library&lt;/a&gt; by Thom Wiggers using optimized C/assembly implementations of the post-quantum algorithms provided by the &lt;a href=&quot;https://github.com/PQClean/PQClean&quot;&gt;PQClean&lt;/a&gt; and &lt;a href=&quot;https://openquantumsafe.org/&quot;&gt;Open Quantum Safe&lt;/a&gt; projects.&lt;/p&gt; &lt;h2 id=&quot;cloudflare-and-kemtls-the-implementation&quot;&gt;Cloudflare and KEMTLS: the implementation&lt;/h2&gt; &lt;p&gt;As part of our effort to show that TLS can be completely post-quantum safe, we implemented the full KEMTLS handshake over the Golang’s TLS 1.3 suite. The implementation was done in several steps:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;We first needed to clone our own version of Golang, so we could add different post-quantum algorithms to it. You can find our own version &lt;a href=&quot;https://github.com/cloudflare/go/&quot;&gt;here&lt;/a&gt;. This code gets constantly updated with every release of Golang, following &lt;a href=&quot;https://github.com/cloudflare/go/wiki/Starting-out&quot;&gt;these steps&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;We needed to implement post-quantum algorithms in Golang, which we did in our own cryptographic library &lt;a href=&quot;https://github.com/cloudflare/circl/tree/master/kem&quot;&gt;CIRCL&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;As we cannot force Certificate Authorities to use certificates with long-term post-quantum KEM keys, we decided to use &lt;a href=&quot;https://blog.cloudflare.com/keyless-delegation/&quot;&gt;Delegated Credentials&lt;/a&gt;. A delegated credential is a short-lasting key that the certificate’s owner has delegated for use in TLS 1.3. Therefore, they can be used for having post-quantum KEM keys. See its implementation in our Golang code &lt;a href=&quot;https://github.com/cloudflare/go/tree/cf-delegated-credentials&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;We implemented mutual auth (client and server authentication) KEMTLS by using Delegated Credentials for the authentication process. See its implementation in our Golang code &lt;a href=&quot;https://github.com/cloudflare/go/tree/cf-pq-kemtls&quot;&gt;here&lt;/a&gt;. You can also check this &lt;a href=&quot;https://github.com/cloudflare/go/blob/cf-pq-kemtls/src/crypto/tls/delegated_credentials_test.go#L774&quot;&gt;test&lt;/a&gt; for an overview of how it works.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; Implementing KEMTLS was a straightforward process, although it did require changes to the way Golang handles a TLS 1.3 handshake and how the key schedule works.&lt;/p&gt; &lt;p&gt;A “regular” TLS 1.3 handshake in Golang (from the server perspective) looks like this:&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;/images/golang_tls.png&quot; alt=&quot;Implemented Golang TLS 1.3 Handshake&quot; style=&quot;height:600px;&quot; /&gt;&lt;/p&gt; &lt;p&gt;We had to interrupt at the point that the server sends the Certificate (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sendServerCertificate()&lt;/code&gt;) in order to send the KEMTLS specific messages. In the same way, we had to add the appropriate KEM TLS messages to the client’s handshake. And, as we did not want to change so much the way Golang handles TLS 1.3, we only added one new constant to the configuration that can be used by a server in order to ask for the Client’s Certificate (the constant is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;serverConfig.ClientAuth = RequestClientKEMCert&lt;/code&gt;).&lt;/p&gt; &lt;p&gt;The implementation is easy to work with: if a delegated credential or a certificate has a public key of a supported post-quantum KEM algorithms, the handshake will proceed with KEMTLS. If the server requests for a Client KEMTLS Certificate, the handshake will use client KEMTLS authentication.&lt;/p&gt; &lt;h2 id=&quot;running-the-experiment&quot;&gt;Running the Experiment&lt;/h2&gt; &lt;p&gt;So, what is next? What is next is to take the code we have produced and run it in the actual Cloudflare infrastructure to measure how efficiently it works.&lt;/p&gt; &lt;h2 id=&quot;thanks&quot;&gt;Thanks&lt;/h2&gt; &lt;p&gt;Many thanks to everyone involved in the project: Chris Wood, Armando Faz-Hernández, Thom Wiggers, Bas Westerbaan, Peter Wu, Peter Schwabe, Goutam Tamvada, Douglas Stebila, Thibault Meunier, and the whole Cloudflare cryptography team.&lt;/p&gt; &lt;hr /&gt; &lt;p id=&quot;foot1&quot; style=&quot;font-size: 16px;&quot;&gt;[1] It is worth noting that the RSA key transport in TLS ≤1.2 has the server only authenticated by RSA public key encryption, although the server&apos;s RSA public key is certified using RSA signatures by Certificate Authorities.&lt;/p&gt; &lt;p id=&quot;foot2&quot; style=&quot;font-size: 16px;&quot;&gt;[2] These numbers, as it is noted in the paper, are based on the round-2 submissions&lt;/p&gt; </description> <pubDate>2021-01-10T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2021/01/10/cf-kemtls.html</link> <guid isPermaLink="true">http://claucece.github.io//2021/01/10/cf-kemtls.html</guid> </item> <item> <title>Post-quantum Cryptography and running experiments with it at Cloudflare</title> <description>&lt;p&gt;&lt;em&gt;Because quantum cats have 7 lives&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Today, I’m speaking at Cloudflare CFTV (&lt;a href=&quot;https://cloudflare.tv/event/5G46CmInDoEyAFmk9Ewi3O&quot;&gt;Cloudflare TV&lt;/a&gt;), with my colleague Armando Faz Hernández. This is very exciting as the talks given there are always of an extremely good quality. This is happening as part of my ongoing work with Cloudflare where I have been part of many amazing projects since I started some months ago (see this &lt;a href=&quot;https://twitter.com/claucece/status/1336432849365446658&quot;&gt;tweet&lt;/a&gt; for an idea). The talk will be around the state of post-quantum cryptography and will be in Spanish (which is something you don’t see around at cryptography talks). But, most excitingly, we will be talking about an ongoing experiment we are running at Cloudflare: Post-quantum KEMs in TLS 1.3.&lt;/p&gt; &lt;p&gt;So, what is the PQ KEM TLS experiment? Basically, it is an experiment that will run on Cloudflare to gather measurements on using PQ KEMs as part of a TLS 1.3 connection. A KEM, in this case, is a Key Encapsulation Mechanism used to achieve server and/or client authentication without the usage of digital signatures. This is due to the fact that signatures in a post-quantum setting have larger sizes than the alternative KEMs. Part of the experiment is also making as few changes as possible to the TLS 1.3 handshake. As we are unable to make changes to Certificate Authorities at the moment, we will be using &lt;a href=&quot;https://tools.ietf.org/html/draft-ietf-tls-subcerts-03&quot;&gt;Delegated Credentials&lt;/a&gt; as an alternative. KEM TLS achieves, therefore, a TLS handshake that provides full post-quantum security. We will be presenting this work at Real World Crypto 2021.&lt;/p&gt; &lt;p&gt;On the talk, we will give an overview of the experiment and we will also discuss what post-quantum cryptography is and came to be.&lt;/p&gt; &lt;p&gt;I’ll leave some additional resources:&lt;/p&gt; &lt;h3 id=&quot;what-is-post-quantum-cryptography&quot;&gt;What is Post-Quantum Cryptography?&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://scienceishere.libsyn.com/science-is-here-7-post-quantum-cryptography-with-tanja-lange&quot;&gt;Post-quantum cryptography with Tanja Lange&lt;/a&gt;: Barry Fitzgerald speaks with Tanja Lange.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-LlkJZJ5DMQ&quot;&gt;PQCHacks&lt;/a&gt; by Daniel Bernstein and Tanja Lange.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZCmnQR3_qWg&quot;&gt;The year in post-quantum crypto&lt;/a&gt; by Daniel Bernstein and Tanja Lange.&lt;/li&gt; &lt;/ul&gt; &lt;h3 id=&quot;the-flavors-of-post-quantum-cryptography&quot;&gt;The flavors of Post-Quantum Cryptography&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EqRsel-rXac&quot;&gt;Code-Based Cryptography&lt;/a&gt; by Tanja Lange.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://media.ccc.de/v/34c3-9075-latticehacks&quot;&gt;Lattice Hacks&lt;/a&gt; by Daniel Bernstein, Tanja Lange and Nadia Heninger.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MG6g04R_Ims&quot;&gt;Lattice-based cryptography&lt;/a&gt; by Phong Nguyen.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qkqtsnXTMQM&quot;&gt;Hashed-based signatures&lt;/a&gt; by Andreas Hülsing.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AoE-uQinzqU&quot;&gt;Isogeny-based cryptography: past, present, and future&lt;/a&gt; by David Jao.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FrM6zAuI7-4&quot;&gt;State of Art of MPKC&lt;/a&gt; by Jintai Ding.&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;https://eprint.iacr.org/2019/1321&quot;&gt;Supersingular isogeny key exchange for beginners&lt;/a&gt; by Craig Costello.&lt;/li&gt; &lt;/ul&gt; &lt;h3 id=&quot;nist-competition&quot;&gt;NIST Competition&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://csrc.nist.gov/Projects/post-quantum-cryptography/round-3-submissions&quot;&gt;Round 3 Submissions&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt; &lt;h3 id=&quot;experiments&quot;&gt;Experiments&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;https://www.cs.umd.edu/~dml/papers/pqc_nist19.pdf&quot;&gt;Measuring TLS key exchange with post-quantum KEM&lt;/a&gt; by Krzysztof Kwiatkowski, Nick Sullivan, Adam Langley, Dave Levin, Alan Mislove.&lt;/li&gt; &lt;/ul&gt; &lt;h3 id=&quot;pq-kem-tls&quot;&gt;PQ KEM TLS&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The paper: &lt;a href=&quot;https://thomwiggers.nl/publication/kemtls/kemtls.pdf&quot;&gt;Post-Quantum TLS Without Handshake Signatures&lt;/a&gt; by Peter Schwabe, Douglas Stebila and Thom Wiggers.&lt;/li&gt; &lt;li&gt;Episode at CryptographyFM: &lt;a href=&quot;https://www.cryptography.fm/1&quot;&gt;Post-Quantum TLS With KEMs Instead of Signatures!&lt;/a&gt; by Douglas Stebila and Thom Wiggers.&lt;/li&gt; &lt;/ul&gt; </description> <pubDate>2020-12-10T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2020/12/10/pq-kem-tls.html</link> <guid isPermaLink="true">http://claucece.github.io//2020/12/10/pq-kem-tls.html</guid> </item> <item> <title>Domestic Abuse</title> <description>&lt;p&gt;&lt;em&gt;“I didn’t realize I was being abused. I thought I was being strong with a complicated person.”&lt;/em&gt; — Evan Rachel Wood&lt;/p&gt; &lt;div class=&quot;disclaimer&quot;&gt; &lt;p&gt;**Disclaimer**&lt;/p&gt; &lt;p&gt;This blog post is for people that identify as woman that are being domestically abused or were abused. It is not for anyone&apos;s personal gain or gossip. But if you want to help stop domentic abuse (in the way I think I can, at least), see the &apos;Some Extra Flavors&apos; section at the end of this post.&lt;/p&gt; &lt;/div&gt; &lt;p&gt;&lt;br /&gt; Yesterday, I watched many videos of Evan Rachel Wood &lt;a href=&quot;#references&quot;&gt;[1]&lt;/a&gt; where she recounts her experiences with the domestic abuse she suffered in hands of a man she can’t name. In a way, this inspired me to write this blog post and to also recount my own story of domestic abuse in the hands of a man I too can’t name (and won’t name, as I see no reason). I also wanted to write this blog post to list all the myths that we as society have created to justify domestic physical, sexual and emotional abuse perpetrated towards people who identify as women. Note, of course, that this is not isolated to heterosexual couples, but to any kind of relationships. Note, of course, that men or other genders can also be domestically abused; but it is more uncommon. Nevertheless, it should be taken into account the experiences they suffered.&lt;/p&gt; &lt;p&gt;Domestic abuse towards women have a big toll in our society and send shock waves to future generations. It is not isolated to the woman who was abused, but also to her immediate relationships and to her children. The effects that it create on women are big and serious. I, for example, developed generalized anxiety disorder (sometimes having 20 panic attacks a day), clinical depression, depersonalization disorder and gastritis. All of these disorders disappeared (or where diminished) when I cut the abuse, as in, from the beginning, my body was telling me that the situation I was part of was not ok. But my mind was clearly failing to catch up.&lt;/p&gt; &lt;p&gt;Note also that the amount of abuse that a woman receives can be exacerbated if she is Latin American, African, Asian or a descent from those, in the hands of a white man. As with everything, abuse has intersectionality. A domestic abuser can use systemic racism to enhance the control and abuse over their partner. I, as a Latin American woman, surely know about this.&lt;/p&gt; &lt;p&gt;Why, we ask ourselves, do we allow abuse to happen. Perhaps, because we have created a mythology used to justify the abusive men. Perhaps, because we don’t want to see it. Perhaps, because we think that people are incapable of such things. You might ask, and with some sort of reason, why if the abuse of a woman is so severe, she doesn’t leave the relationship. Probably, because she can’t, as the abuser holds economic, political or social power towards her, as so happens many times in relationships. But, also, because we, as human beings, are empathetic and want to help other people. I think this was my case. It took my years to realize I was being domestically abused (even when I knew I was physically abused), because, I, as Rachel Wood, thought that “I was being strong with a complicated person”. I thought I was being helpful with a person in need. I thought I was saving a depressive human.&lt;/p&gt; &lt;p&gt;Truth is: no matter how much I helped this person, no matter how much I annihilated my individual or self in the process, no matter how much love I showed, it was never enough. Because the sense of self-entitleness and privilege of an abuser is never satisfied. It is not on you, it is on them.&lt;/p&gt; &lt;p&gt;Chronic mistreatment gets people to doubt themselves. An abusive partner will deny your experience of abuse by any means: he will pluck your reality and replace it with his. He will make you feel crazy. He will beat you, and justify it as it was your problem or that you caused it. He will try to convince others that you are irrational. It is a process of identity invasion, so “never believe a man’s claim that he has to harm his partner in order to protect her; only abusers think this way” &lt;a href=&quot;#references&quot;&gt;[2]&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;A domestic abuser will also feel entitled to your whole existence. You should: 1. help him at work, 2. attend any emotional need, 3. sexually satisfy him, and 4. never criticize him. The worst experiences of abuse I had on this relationship were precisely when I dared to criticize this man. I was accused so many times of making him ‘suicidal’ that I stop explaining what my needs were because I feared he might commit suicide. Truth is he never did. And I later found out that this was a tactic he used with many women. These sentences do not mean that we should obliterate the fact that someone might be sharing with us their depressive thoughts; but if they are used to justify abuse, then, they are not ok.&lt;/p&gt; &lt;p&gt;One of the basic human rights domestic abusers will take away from you is the right to be angry. No matter how badly he treats you, he believes that your voice shouldn’t rise, your blood shouldn’t boil, and that you shouldn’t strike back. He doesn’t have a problem with anger (as anger is sometimes used to justify abuse), he has a problem with his partner’s anger. Why does he hate anger? Because he believes he is beyond criticism or because there is power in anger. In my case, for example, on one instance, he pushed me away to a wall in front of a colleague because I failed to listen to him while he was talking (I was, in truth, distracted). I was supposed to listen to him every time he spoke. If I dared to speak my anger, he will physically or sexually punish me. And furthermore, he will say that he was the victim of my mistreatment, even if to this day I have scars of his physical abuse.&lt;/p&gt; &lt;p&gt;Perhaps, one of the most horrible things that women experience while being abused is the backlash in hands of others. I remember being supremely judged by other women who used to be close friends with this man, and who expected me to either change this man, or use me as an escape goat to perhaps project their own anger. What I learned from this is that we shouldn’t judge the abused woman because she fails our expectations of 1. leaving the abusive partner, 2. standing up to him, 3. defending others, 4. be a moral compass. I think abused woman have enough on their plate while being abused as to also be policed by others expectations. I think we should help abused women; but if what they do fails our expectations, then maybe the best thing is to move along and shut up.&lt;/p&gt; &lt;p&gt;I, luckily, got away from that relationship because if I didn’t I think I will be death by now. I couldn’t keep going anymore and my mental state was failing me. It was hard to get away. But I had a big amount of friends that helped me. So, you too can get away if you are in an abusive relationship. But you will need a plan for your physical safety and maybe for your children safety. As this blog post notes &lt;a href=&quot;#references&quot;&gt;[3]&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;“It is important to remember that leaving abuse is a three part stage where deciding to leave and leaving are not separate stages from the preparation stage. Survivors can never really relax for the rest of their lives. They will forever have to look back at their previous life and make sure their tracks are covered”.&lt;/p&gt; &lt;p&gt;While not being the perfect book, it is also good to read ‘Why does he do that?’ by Lundy Bancroft &lt;a href=&quot;#references&quot;&gt;[2]&lt;/a&gt; (which this blog post takes inspiration from). A friend of mine recommended me this book when I was being abused, and, in a way, opened my eyes.&lt;/p&gt; &lt;p&gt;Remember that getting away from a partner that is an abuser is never easy. To this day, I get stalked and harassed by the man I left. It is a constant battle; but remember that you took the step of getting away, and that, in itself, is the biggest victory.&lt;/p&gt; &lt;p&gt;I will proceed to talk about the myths we create to justify abuse towards women and to list resources that you can use to get help if you are in an abusive relationship. Note that this is not an extensive list, and some things might not be extremely accurate. This are only some of my thoughts that take inspiration from the Bancroft book.&lt;/p&gt; &lt;h2 id=&quot;myths&quot;&gt;Myths&lt;/h2&gt; &lt;p&gt;&lt;br /&gt; &lt;strong&gt;1. He was abused as a child and that makes him abusive&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I was too sexually abused as a child, and my father was an alcoholic that abandoned us. Has that make me abusive? No.&lt;/p&gt; &lt;p&gt;As Bancroft recalls:&lt;/p&gt; &lt;p&gt;“I have sometimes said to a client: “If you are so in touch with your feelings from your abusive childhood, then you should know what abuse feels like. You should be able to remember how miserable it was to be cut down to nothing, to be put in fear, to be told that the abuse is your own fault. You should be less likely to abuse a woman, not more so, from having been through it.” Once I make this point, he generally stops mentioning his terrible childhood; he only wants to draw attention to it if it’s an excuse to stay the same, not if it’s a reason to change”.” &lt;a href=&quot;#references&quot;&gt;[2]&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Being abused as a child does not create adult abusers; but is can be used as an excuse.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. He has a previous partner that mistreated him and now he has a problem with women as a result&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;An abusive man will try to always complain about his ex-partner, specially, if she stood up to him. But one bad relationship does not make a person abusive. Generalizing one situation to the wholeness of women is controlling and misguided in itself.&lt;/p&gt; &lt;p&gt;If it is an excuse to mistreat you, then it is a distortion. My abusive ex-partner had a very bad relationship with the ex-partner right before me. But, later I found out that he too abused her (and to many others as well). Then, he does not have a problem with women, he has a problem with women that he abused and that later stood up to him.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. He has as a mental disease or mood disorder that causes the abuse&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Mental illnesses don’t cause abusiveness. Many abusers report that when they beat their partner they are very aware of what they are doing, as they often don’t hit the body parts of the partner that others will be able to see (and, therefore, expose him). They don’t loose control because of a mental disease; they are very much in control.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. He suffers from low self-esteem&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As Bancroft tells:&lt;/p&gt; &lt;p&gt;“An abused woman tends to pour precious energy into supporting her abusive partner and massaging his ego, hoping against hope that if he is kept well stroked his next explosion might not happen” &lt;a href=&quot;#references&quot;&gt;[2]&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;An abusive man can use low self-esteem to get favours from people around him, and to use as a shield when he is questioned/criticised. They problem is not that they have low self-esteem, but that they use this thinking to control and manipulate others around him. And, most importantly, to manipulate and control their partner.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;6. Abuse is as bad for the man who is doing it as it is for his partner. They are both victims&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As Bancroft notes:&lt;/p&gt; &lt;p&gt;“Abusers get over the pain of the abuse incidents far, far faster than their partners do. Certainly abusing one’s partner is not a healthy lifestyle, but the negative effects don’t hold a candle to the emotional and physical pain, loss of freedom, self-blame, and numerous other shadows that abuse casts over the life of its female target. Unlike alcoholics or addicts, abusive men don’t “hit bottom.” They can continue abusing for twenty or thirty years, and their careers remain successful, their health stays normal, their friendships endure. Abusers actually tend to benefit in many ways from their controlling behaviors.”&lt;/p&gt; &lt;p&gt;I think the quote from Bancroft explains this enough.&lt;/p&gt; &lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt; &lt;p&gt;If you are a person identifying as a woman in an abusive relationship, seek help. Trust in a close friend that will understand (and not judge) your experience and create a plan to leave that abusive relationship. You can also follow these accounts for help (thanks to awesome @RisuToInu!):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;@nnedv&lt;/li&gt; &lt;li&gt;@RefugeCharity&lt;/li&gt; &lt;li&gt;@OSPASafeEscape&lt;/li&gt; &lt;li&gt;@live_life_safe&lt;/li&gt; &lt;li&gt;@SEAresource&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 id=&quot;some-extra-flavors&quot;&gt;Some Extra Flavors&lt;/h2&gt; &lt;p&gt;I’ve been thinking on creating a group (maybe for research/implementation, etc.) to talk about how digital tools are used to enhance domestic abused (stalking, installing spyware, etc.), what we can do to help it and stop it. If you are interested, ping me up ;)&lt;/p&gt; &lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;“Evan Rachel Wood on Surviving an Abusive Relationship” by SELF, Oct 30, 2019. Available &lt;a href=&quot;https://www.youtube.com/watch?v=juK9c8zgUvU&amp;amp;t=38s&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;“Why does he do that?” by Lundy Bancroft, Putnam’s Sons, New York, 2002.&lt;/li&gt; &lt;li&gt;“Resources for Domestic Abuse Survivors” by Security Trash Panda, July 24, 2019. Available &lt;a href=&quot;https://trashpanda.blog/2019/07/24/resources-for-domestic-abuse-survivors/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;/ol&gt; </description> <pubDate>2020-06-06T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2020/06/06/abuse.html</link> <guid isPermaLink="true">http://claucece.github.io//2020/06/06/abuse.html</guid> </item> <item> <title>Programming language design and compilers: where to start?</title> <description>&lt;p&gt;&lt;em&gt;So you want to get into design, kid?&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Over the past months, I have gotten more and more interested on how programming languages are designed, why such decisions are made, and the compiler role into this. I think that I started getting interested because of a current research around Golang’s compiler, and I got amazed by the amount of beauty that designing a language can create.&lt;/p&gt; &lt;p&gt;Lurking into Golang’s archive and talks &lt;a href=&quot;#references&quot;&gt;[1]&lt;/a&gt;, I stumbled upon two very interesting papers that influenced their design. Those papers are “Hints on Programming Language Design” &lt;a href=&quot;#references&quot;&gt;[2]&lt;/a&gt; by C. A. R. Hoare and “Everything You’ve Wanted to Know about Programming Languages but Have Been Afraid to Ask” &lt;a href=&quot;#references&quot;&gt;[3]&lt;/a&gt; by C. A. R. Hoare, as well. Those two papers inspired me to reach to other sources so I can learn about programming language design, which, as Hoare says should “help the programmer in the practice of his (probably, ‘their’, sic) art”.&lt;/p&gt; &lt;p&gt;Of course, a big portion of programming languages and their use is the design of the compiler that the programming language uses or at least an understanding how it behaves. So in this blogpost, we will also list resources for learning compiler design.&lt;/p&gt; &lt;p&gt;The resources that are going to be listed here are the result of a tweet I sent from my personal account &lt;a href=&quot;#references&quot;&gt;[4]&lt;/a&gt;. Lots of very interesting answers were made from people who have actually designed the programming languages that we use everyday. So, in order to make that thread more useful, I’ll list them nicely here. Note that I have not yet read all of these books, so the small review that accompanies the resources on the list is based on other people’s opinions or the result of me skimming over them. I’ll eventually make blogposts of the ones I read ;)&lt;/p&gt; &lt;h1 id=&quot;programming-language-design&quot;&gt;Programming language design&lt;/h1&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3 id=&quot;books&quot;&gt;Books&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;The one and only &lt;strong&gt;Structure and Interpretation of Computer Programs (SICP)&lt;/strong&gt; or the Wizard Book by Harold Abelson and Gerald Jay Sussman with Julie Sussman. A must book that every programmer should read, as it teaches the fundamental principles of computer programming. A book recommended by basically everyone.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Programming Language Pragmatics&lt;/strong&gt; by Michael Lee Scott. The book I’m currently reading which explains why programming languages work. A book super recommended as well.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Practical Foundations for Programming Languages&lt;/strong&gt; (Second Edition) by Robert Harper &lt;a href=&quot;#references&quot;&gt;[5]&lt;/a&gt;, as recommended by Eric Christopher (@echristo). As the author states, “a comprehensive framework for formulating and analyzing a broad range of ideas in programming languages”. It is worth also checking the website which contains lots of supplementary materials.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Types and Programming Languages&lt;/strong&gt; by Benjamin C. Pierce, as recommended by Shriram Krishnamurthi (@ShriramKMurthi) and @1stSV_97. It is a comprehensive introduction both to type systems in computer science and to the basic theory of programming language.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Essentials of Programming Languages&lt;/strong&gt; by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes , as recommended by Shriram Krishnamurthi (@ShriramKMurthi). A deep, working understanding of the essential concepts of programming languages. This will be my next book to read. People say that the first edition is the best one ;)&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Programming Languages: Application and Interpretation&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[6]&lt;/a&gt; by Shriram Krishnamurthi himself. I’m very eager to read this book, so expect a review.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Crafting Interpreters&lt;/strong&gt; by Bob Nystrom (@munificentbob) &lt;a href=&quot;#references&quot;&gt;[7]&lt;/a&gt;, as recommended by @mostlysafe. It focuses on learning everything you need to actually implement a scripting language.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;The Design and Evolution of C++&lt;/strong&gt; by Bjarne Stroustrup (the inventor of C++), as recommended by Shafik Yaghmour (@shafikyaghmour). As the recommender refers, it gives “a solid understanding of why trade-offs are made” in the language. This book obviously focuses on the decisions made during the development of the C++ programming language; but it also gives insights on the object-oriented programming philosophy.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Implementation of Functional Programming Language&lt;/strong&gt; by Simon Peyton Jones &lt;a href=&quot;#references&quot;&gt;[8]&lt;/a&gt;, as recommended by @MarisaVeryMoe. This book is out of print but you can find its entirety in PDF form. An excellent book for anyone interested in functional programming.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;The Elements of Computing Systems: Building a Modern Computer from First Principles&lt;/strong&gt; by Noam Nisan and Shimon Schocken, as recommended by Lars Tackmann (@ltackmann). This book does not only focuses on programming language design but of all applied computer science.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3 id=&quot;courses&quot;&gt;Courses&lt;/h3&gt; &lt;p&gt;As Jeff Dean states (@JeffDean), after reading enough books, it is always worth checking the reading list of different graduate courses. Here just two suggested:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;‘Implementation of Programming Languages’ (CSE 501) from the ‘Paul G. Allen School of Computer Science &amp;amp; Engineering. It is a must to check the reading papers for this course.&lt;/li&gt; &lt;li&gt;‘Concepts of Programming Languages’ (CSE 505) from the ‘Paul G. Allen School of Computer Science &amp;amp; Engineering. It is a must to check the reading papers for this course.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1 id=&quot;compiler-design&quot;&gt;Compiler design&lt;/h1&gt; &lt;h3 id=&quot;books-1&quot;&gt;Books&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Engineering a Compiler&lt;/strong&gt; by Keith Cooper and Linda Torczon, as recommended by John Regehr (@johnregehr). It covers the important techniques for constructing a modern compiler.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Building an Optimizing Compiler&lt;/strong&gt; by Bob Morgan, as recommended by Eric Christopher (@echristo). It provides a high level design for a thorough optimizer, code generator, scheduler and register allocator for a generic modern RISC processor.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;The GCC list of compiler books&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[9]&lt;/a&gt;. The list of compiler books by default, with enough review for you to make a choice.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Modern Compiler Implement in ML&lt;/strong&gt; by Andrew W. Appel, as recommended by @xandkar. A book that describes all phases of a modern compiler.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1 id=&quot;conferences-to-attend&quot;&gt;Conferences to attend&lt;/h1&gt; &lt;p&gt;Something that helped me on my cryptography journey was to attend conferences. I’ll like to start to do that as well for PL, so these are the conferences that seem like a must to attend:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;History of Programming Languages (HOPL)&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[10]&lt;/a&gt;. It’s fourth edition is happening on 2021, and it is a MUST to attend. It is also very nice to check the papers presented over the past editions.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;ACM SIGPLAN Symposium on Principles of Programming Languages (POPL)&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[11]&lt;/a&gt;. A conference to discuss aspects of programming languages.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI)&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[12]&lt;/a&gt;. A conference not only about design but also about implementation. I’m very excited to attend this year, so expect a blogpost about it.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;ACM SIGPLAN International Conference on Functional Programming (ICFP)&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[13]&lt;/a&gt;. For those who love functional programming.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;ACM SIGPLAN Object-Oriented Programming, Systems, Languages &amp;amp; Applications (OOPSLA)&lt;/strong&gt; &lt;a href=&quot;#references&quot;&gt;[14]&lt;/a&gt;. For those who love object-oriented programming.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1 id=&quot;to-follow&quot;&gt;To follow&lt;/h1&gt; &lt;p&gt;I often find useful to follow people and read their thoughts. Note that, often times, these places are personal, so don’t only expect ‘computer science’ stuff, and treat them nicely.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;For computer science and amazing thoughts: the blog of Robert Harper &lt;a href=&quot;#references&quot;&gt;[15]&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;For LLVM and compilers: the blog of John Regehr &lt;a href=&quot;#references&quot;&gt;[16]&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;For C++, C#, Diversity and much more amazing content: the website of Patricia Aas &lt;a href=&quot;#references&quot;&gt;[17]&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Basically, that is it. I’ll like to thank the amazing people that gave me recommendations and whose work inspire me to continue on the journey (they are everywhere mentioned on this blogpost). I hope it does for you, as well.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt; &lt;ol&gt; &lt;li&gt;“Go” by Rob Pike, Mar 18, 2015. Available &lt;a href=&quot;https://inst.eecs.berkeley.edu/~cs294-101/sp15/slides/Go.pdf&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;“Hints on programming language design” by C. A. R. Hoare, Dec, 1973. Available &lt;a href=&quot;https://www.cs.yale.edu/flint/cs428/doc/HintsPL.pdf&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;“Everything You’ve Wanted to Know about Programming Languages but Have Been Afraid to Ask” by C. A. R. Hoare, Dec, 1973. Available &lt;a href=&quot;https://www.cs.ox.ac.uk/files/6156/H78%20-%20Everything.pdf&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Tweet sent by Sofía Celi. Available &lt;a href=&quot;https://twitter.com/claucece/status/1262586891775414272&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://www.cs.cmu.edu/~rwh/pfpl/index.html&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;The website is &lt;a href=&quot;https://www.plai.org/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://craftinginterpreters.com/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/the-implementation-of-functional-programming-languages/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://gcc.gnu.org/wiki/ListOfCompilerBooks&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Read about it &lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Programming_Languages&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Its 2021 website. Available &lt;a href=&quot;https://popl21.sigplan.org/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Its 2020 website. Available &lt;a href=&quot;https://conf.researchr.org/home/pldi-2020&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Its 2020 website: Available &lt;a href=&quot;https://icfp19.sigplan.org/home/icfp-2020&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Read about it &lt;a href=&quot;https://en.wikipedia.org/wiki/OOPSLA&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://existentialtype.wordpress.com/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://blog.regehr.org/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Available &lt;a href=&quot;https://patricia.no/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;/ol&gt; </description> <pubDate>2020-06-05T00:00:00+00:00</pubDate> <link>http://claucece.github.io//2020/06/05/programming-language-design-and-compilers.html</link> <guid isPermaLink="true">http://claucece.github.io//2020/06/05/programming-language-design-and-compilers.html</guid> </item> </channel> </rss>