<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- name="generator" content="blosxom/2.0" --><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="0.91">
  <channel>
    <title>malb::blog   </title>
    <link>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl</link>
    <description>blog on rocket science and social skills</description>
    <language>en</language>

  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
    <title>A Description of Matrix-$F_5$</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/e9JeqK22gO8/09</link>
    <description>I just uploaded a  &lt;a href="http://www.informatik.uni-bremen.de/~malb/drafts/on_groebner_bases_20091111.pdf"&gt;very, very (very!) rough draft&lt;/a&gt; of what hopefully eventually becomes the introduction of my thesis. I am currently busy with other stuff so I figured I might as well dump it here in case anyone is curious. The preliminary table of contents is
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Buchberger&amp;#8217;s Algorithm and Gr&amp;ouml;bner Bases&lt;/em&gt;: standard stuff, I hope I will cover the GM installation eventually.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;F4&lt;/em&gt;: very similar to my Diplomarbeit.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Slim Gr&amp;ouml;bner Bases&lt;/em&gt;: I didn&amp;#8217;t write a single word yet, but I should.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Matrix-F5&lt;/em&gt;: a fairly long treatment of Matrix-$F_5$ aimed at people who know XL.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;F5&lt;/em&gt;: this only contains pseudo code for an F4-style F5. The main text is really really drafty.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Other Polynomial System Solving Algorithms&lt;/em&gt;: this should be a short overview of other techniques, like ElimLin, SAT-solvers, Linear Programming.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you find an error, I&amp;#8217;d be happy to hear about it. But once again, this is just some draft which is far far from being finished!&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/e9JeqK22gO8" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/11/09#matrix-f5-draft</feedburner:origLink></item>
  <item>
    <title>M4RI-20091101 Released</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/mQx-D8EZCyg/04</link>
    <description>I just tagged the new release. Get it at &lt;a href="http://m4ri.sagemath.org"&gt;http://m4ri.sagemath.org&lt;/a&gt; or from &lt;a href="http://bitbucket.org/malb/m4ri"&gt;http://bitbucket.org/m4ri/malb&lt;/a&gt;. We did not change that much but this release finally has our improvements from Sage Days 16 where we improved matrix elimination quite a bit.
&lt;/p&gt;
&lt;img src="http://www.informatik.uni-bremen.de/~malb/binary/yet-another-density-plot.png" alt="yet another density plot" width="800"/&gt;
&lt;p&gt;
While there is still some work to do (see the bump in the plots above), this release might be a first candidate where it makes sense to switch to LQUP/PLUQ by default for matrix elimination (e.g. in &lt;a href="http://polybori.sourceforge.net"&gt;PolyBoRi&lt;/a&gt;).&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/mQx-D8EZCyg" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/11/04#m4ri-20091101</feedburner:origLink></item>
  <item>
    <title>Martin Kreuzer on Algebraic Attacks</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/Yuf2NOPcjEY/04</link>
    <description>The &lt;a href="http://www.heldermann-verlag.de/gcc/gcc01/gcc023.pdf"&gt;article&lt;/a&gt; seems to be good overview of the area (I only skimmed it so far).
&lt;br /&gt;
&lt;b&gt;Table of Contents&lt;/b&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Cryptosystems&lt;/li&gt;
&lt;li&gt;From Cryptosystems to Polynomial Systems&lt;/li&gt;
&lt;li&gt;Attack Methods Based on Polynomials&lt;/li&gt;
&lt;li&gt;The XL, XSL and MutantXL Attacks&lt;/li&gt;
&lt;li&gt;The Gr&amp;ouml;bner Basis Attack&lt;/li&gt;
&lt;li&gt;The Border Basis Attack&lt;/li&gt;
&lt;li&gt;The Integer Programming Attack&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I wonder how his IP approach relates to &amp;#8220;Bivium as a Mixed-Integer Linear Programming Problem&amp;#8221; by Julia Borghoff, Lars R. Knudsen and Mathias Stolpe.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/Yuf2NOPcjEY" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/11/04#kreuzer</feedburner:origLink></item>
  <item>
    <title>Sage Development Visualisation by Alex Ghitza</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/CcaBzcLqzU0/19</link>
    <description>In the first few seconds were Gonzalo does all the work, he imports all of Sage into the revision control system DARCS. Before then we were not using revision control at all.&lt;/p&gt;
&lt;p&gt;
&lt;object width="400" height="300" data="http://vimeo.com/moogaloop.swf?clip_id=7133792&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7133792&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"  /&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/7133792"&gt;Sage code swarm&lt;/a&gt; from &lt;a href="http://vimeo.com/user2480388"&gt;Alex Ghitza&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt; &lt;b&gt;PS:&lt;/b&gt; &lt;a href="http://ken-blog.krugler.org/2008/06/14/converting-vimeo-embedded-html-to-xhtml/"&gt;Vimeo for XHTML&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/CcaBzcLqzU0" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/10/19#codeswarm-2009-10</feedburner:origLink></item>
  <item>
    <title>OpenPGP</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/MPhBbxH5WaA/04</link>
    <description>One of the nice aspects of my current occupation is that I can type &lt;a href="http://en.wikipedia.org/wiki/OpenPGP#OpenPGP"&gt;OpenPGP&lt;/a&gt; into &lt;a href="http://springerlink.com/content/?k=OpenPGP"&gt;springerlink&lt;/a&gt;&amp;#8217;s and &lt;a href="http://scholar.google.co.uk/scholar?q=OpenPGP"&gt;Google Scholar&lt;/a&gt;&amp;#8217;s search boxes and claim that reading every paper I deem interesting is &amp;#8220;work&amp;#8221;. OpenPGP is the standard which is implemented by programs like &lt;a href="http://www.gnupg.org/"&gt;GnuPG&lt;/a&gt; and PGP for e-mail encryption and digital signatures. The reason I became curious is because I wanted to implement something like an OpenPGP encrypted wiki or filesystem for multiple users.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.ietf.org/rfc/rfc4880.txt"&gt;RFC 4880&lt;/a&gt;&lt;/b&gt; is the current revision of the OpenPGP message format standard, addressing some of the security concerns mentioned below. It replaces &lt;a href="http://www.ietf.org/rfc/rfc1991.txt"&gt;RFC 1991&lt;/a&gt; and &lt;a href="http://www.ietf.org/rfc/rfc2440.txt"&gt;RFC 2440&lt;/a&gt;. You have to admire that they got their hands on 4880 to replace 2440.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.springerlink.com/content/kabnt5qpdgrv7c6g/"&gt;Can We Trust Cryptographic Software? Cryptographic Flaws in GNU Privacy Guard v1.2.3&lt;/a&gt;&lt;/b&gt; by Phong Nguyen describes a few errors made in the GnuPG implementation of the OpenPGP standard. In particular some parameters used in ElGamal encryption were chosen to be small for performance reasons which allowed lattice-based attacks. Lattice-based attacks on small parameters in public-key cryptography are not new, another &lt;a href="http://wiki.sagemath.org/sage-2.11"&gt;example&lt;/a&gt; is textbook RSA with say 512-bit modulus encrypting a DES 56-bit key. From the paper: &amp;#8220;If a proprietary software claims to implement 2048-bit RSA and 128-bit AES, it does not say much about the actual cryptographic security: which RSA is being used? Could it be textbook RSA (with zero-padding) encrypting a 128-bit AES key with public exponent 3? &amp;#8230; Open source software thus sounds like a good solution. However, the fact that a source code can be read does not necessarily imply that it is actually read, especially by cryptography experts.&amp;#8221; The flaw was rather serious (one package was sufficient to compute the private key) but the required configuration fortunately not very wide-spread since it was never the default choice. The particular option was removed from GnuPG since then.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://springerlink.com/content/m60212001x954772/"&gt;An Attack on CFB Mode Encryption as Used by OpenPGP&lt;/a&gt;&lt;/b&gt; by  Serge Mister and Robert Zuccherato describes an attack on the ad-hoc modification of &lt;a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29"&gt;CFB mode&lt;/a&gt;. PGP does not use variable IVs but instead encrypts a random block first and then two bytes which repeat two bytes from the first block. This redundancy provides a &amp;#8220;quick check&amp;#8221; whether the correct symmetric key was used for decryption or not. This also instantiates an integrity-check oracle if the information whether decryption passed this test or not is made available to the attacker. She can use this oracle to decrypt two bytes from any ciphertext block. The setup costs $2^{15}$ oracle queries and each block also costs $2^{15}$ oracle queries on average. RFC4880 discourages the use of this &amp;#8220;quick check&amp;#8221; and I think GnuPG avoids it.
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://springerlink.com/content/4yxg1g7jttn4ywbn/"&gt;Adaptive-CCA on OpenPGP Revisited&lt;/a&gt;&lt;/b&gt; by Hsi-Chung Lin, Sung-Ming Yen and Guan-Ting Chen does what the title implies. It revisits older adaptive CCA attacks and evaluates their applicability to RFC2440, also some new adaptive CCA attacks with weaker assumptions are proposed. All these attacks should not apply against RFC4880 anymore.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://springerlink.com/content/x587847626m06014/"&gt;Privacy in Encrypted Content Distribution Using Private Broadcast Encryption&lt;/a&gt;&lt;/b&gt; by Adam Barth, Dan Boneh and Brent Waters is not really about OpenPGP. The authors construct a system where content is distributed in encrypted form but no one can tell who is a recipient not even other recipients: private broadcast encryption. OpenPGP does not provide this feature, as pointed out in the paper. While it allows to remove the explicit tag for which key a packet is encrypted, it chooses random Diffie-Hellmann groups for each key and thus still allows to break privacy (by distinguishing groups). While this could easily be fixed too, the authors also consider active attacks where an attacker modifies an encrypted message for Alice to contain the text &amp;#8220;please visit the following URL for free music&amp;#8221; (that really is their example!). The attacker then waits for Alice to click on the link which can only happen if she could decrypt the original message.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The bottom line is that OpenPGP features some ad-hoc cryptography which is not up to the standards of the cryptography research community. For example, OpenPGP is most definitely not secure against chosen-ciphertext attacks (&lt;a href="http://en.wikipedia.org/wiki/Chosen-ciphertext_attack"&gt;CCA&lt;/a&gt;). This is likely not an issue for e-mail security where a human being enters passphrases to unlock private keys and where reports of errors are not relayed to a potential attacker. However, for instance a server which automatically decrypts messages and acts based on the content of the cleartext is a whole different story &amp;#8230; and so is my OpenPGP encrypted wiki thingy.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;PS:&lt;/b&gt; I will be at the ECRYPT-II &lt;a href="http://www.ecrypt.eu.org/openreview.html"&gt;Workshop on Cryptology: Progress and Challenges&lt;/a&gt; in Leuven in two weeks.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/MPhBbxH5WaA" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/09/04#openpgp-papers</feedburner:origLink></item>
  <item>
    <title>SAT Solving Pointers</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/N6UcD3vqNoA/27</link>
    <description>This is just a quick note to point out two SAT-solving sources relevant for cryptography.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Michael Brickenstein provides an &lt;a href="http://bitbucket.org/brickenstein/polybori-scripts/src/tip/cnf.py"&gt;alternative&lt;/a&gt; approach for &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/anf2cnf.py"&gt;ANF to CNF conversion&lt;/a&gt; in his &lt;a href="http://polybori.sourceforge.net/"&gt;PolyBoRi&lt;/a&gt; scripts &lt;a href="http://bitbucket.org/brickenstein/polybori-scripts/"&gt;collection&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mate Soos makes his changes to &lt;a href="http://minisat.se/"&gt;MiniSat&lt;/a&gt; available on his &lt;a href="http://planete.inrialpes.fr/~soos/CryptoMiniSat/index.html"&gt;website&lt;/a&gt;. Those changes are meant to make it more suitable for cryptographic applications, hence the name &lt;a href="http://planete.inrialpes.fr/~soos/CryptoMiniSat/index.html"&gt;CryptoMiniSat&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Have fun.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/N6UcD3vqNoA" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/08/27#sat-solving-bits</feedburner:origLink></item>
  <item>
    <title>Silke&amp;#8217;s Most Recent Project</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/iZjppkQuvDM/13</link>
    <description>Silke &lt;a href="http://bunnylabs.blogspot.com/2009/07/something-i-have-been-building-last.html"&gt;worked&lt;/a&gt; on this for a couple of weeks (with overtime and all that) and it is finally done. Figured, I should spread the word.
&lt;/p&gt;
&lt;object type="application/x-shockwave-flash" data="http://harrypotter.ea.com/widget/swf/host.swf" id="w4a40a4d4f2c114254a5b1674112d97b1" height="250" width="300"&gt;    &lt;param value="http://harrypotter.ea.com/widget/swf/host.swf" name="movie"/&gt; &lt;param value="transparent" name="wmode" /&gt;&lt;param value="pid=4a5b1674112d97b1&amp;amp;type=cs&amp;amp;lang=en" name="flashvars" /&gt;&lt;param value="all" name="allowNetworking" /&gt;&lt;param value="always" name="allowScriptAccess" /&gt;
&lt;/object&gt;
&lt;p&gt;
Enjoy.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/iZjppkQuvDM" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/07/13#silke-hp</feedburner:origLink></item>
  <item>
    <title>Algebraic Attacks and CNF</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/wV8kJ13TYDk/09</link>
    <description>Since the seminal papers &lt;a href="http://eprint.iacr.org/2006/402"&gt;[1]&lt;/a&gt; and &lt;a href="http://eprint.iacr.org/2007/024"&gt;[2]&lt;/a&gt; by Bard, Courtois and Jefferson it seems accepted wisdom that the right thing to do for constructing a CNF representation of a block cipher is to construct an algebraic system of equations first (cf. &lt;a href="http://eprint.iacr.org/2009/279"&gt;[3]&lt;/a&gt;). This system of equations is then converted to CNF using some ANF to CNF converted (e.g. &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/anf2cnf.py"&gt;[4]&lt;/a&gt;) which deals with the negative impact of the XORs just introduced via the ANF. On the other hand, it is straight forward to compute some CNF for a given S-Box directly by considering its truth table. Sage now contains &lt;a href="http://trac.sagemath.org/sage_trac/ticket/6185"&gt;code&lt;/a&gt; which does this for you:
&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mq&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;gf2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;polybori&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sbox&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cnf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;
&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
I am not claiming that this naive approach produces an optimal representation, it seems more compact than what ANF to CNF converters produce, though.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/wV8kJ13TYDk" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/07/09#sbox-cnf</feedburner:origLink></item>
  <item>
    <title>LQUP vs. PLUQ</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/bgrrB8ZsQ3k/27</link>
    <description>At SD16 Cl&amp;eacute;ment Pernet and myself have been working on improving the asymptotically fast PLUQ factorisation over GF(2) in M4RI. As mentioned earlier, one of the main problems is that column swaps are pretty expensive compared to many other operations we do. Eventually, we settled for LQUP over PLUQ since it has fewer column swaps overall since it does not compress U. We also improved the base case both w.r.t. to sparse matrices and in general (more Gray code tables are used now) and the column swap performance overall (cf. &lt;a href="http://wiki.sagemath.org/days16/projects"&gt;SD 16 Wiki&lt;/a&gt;). The result is noticeable, but we are not quite there yet:
&lt;/p&gt;
&lt;img src="http://www.informatik.uni-bremen.de/~malb/binary/m4ri-lqup-sparse-ish-2-14.png" alt="M4RI r284 vs. r292" title="M4RI r284 vs. r292" /&gt;
&lt;p&gt;
There are still some places which could be improved so this should get better eventually. Also, we might have another strategy to deal with these sparse-ish/structured matrices. Anyway, the new PLUQ code is at least as fast as M4RI for the structured HFE examples on the M4RI website on my Core2Duo 2.33Ghz notebook (and of course much faster on random examples and on other platforms) The new code is available on &lt;a href="http://www.bitbucket.org/malb/m4ri"&gt;BitBucket&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/bgrrB8ZsQ3k" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/06/27#m4ri-lqup-the-pluq-then-lqup</feedburner:origLink></item>
  <item>
    <title>More OpenMP Experiments with M4RI</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/xl1osdDG28A/18</link>
    <description>Motivated by a thread on &lt;a href="http://groups.google.com/group/mpir-dev/browse_thread/thread/d00c8765cacf600a"&gt;[mpir-dev]&lt;/a&gt; I played around with &lt;a href="http://openmp.org/wp/"&gt;OpenMP&lt;/a&gt; again today. The performance does not scale linearly &amp;#8230; but hey it scales at all. I guess eventually I&amp;#8217;ll have to get serious about this and sit down to make this proper. Anyway, here are the timings (on &lt;a href="http://geom.math.washington.edu"&gt;geom.math.washington.edu&lt;/a&gt;)
&lt;/p&gt;

&lt;table&gt;
&lt;caption&gt;Computing the reduced row echelon form of an $n \times n$ random dense matrix over $\mathbf{F}_2$.&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;n&lt;/th&gt;
&lt;th&gt;M4RI &lt;br /&gt;1 thread&lt;/th&gt;
&lt;th&gt;PLUQ &lt;br /&gt;1 thread&lt;/th&gt;
&lt;th&gt;M4RI &lt;br /&gt;4 threads&lt;/th&gt;
&lt;th&gt;PLUQ &lt;br /&gt;4 threads&lt;/th&gt;
&lt;th&gt;M4RI &lt;br /&gt;16 threads&lt;/th&gt;
&lt;th&gt;PLUQ &lt;br /&gt;16 threads&lt;/th&gt;
&lt;th&gt;PLUQ 16 threads&lt;br /&gt; cutoff=2048&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;  10,000 &lt;/td&gt;&lt;td&gt;    1.72 &lt;/td&gt;&lt;td&gt;  0.85 &lt;/td&gt;&lt;td&gt;   1.03 &lt;/td&gt;&lt;td&gt;  0.86 &lt;/td&gt;&lt;td&gt;   0.58 &lt;/td&gt;&lt;td&gt;   0.80 &lt;/td&gt;&lt;td&gt;   0.77&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;  16,384 &lt;/td&gt;&lt;td&gt;   13.75 &lt;/td&gt;&lt;td&gt;  5.76 &lt;/td&gt;&lt;td&gt;        &lt;/td&gt;&lt;td&gt;  4.78 &lt;/td&gt;&lt;td&gt;        &lt;/td&gt;&lt;td&gt;   4.23 &lt;/td&gt;&lt;td&gt;       &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;  20,000 &lt;/td&gt;&lt;td&gt;   27.02 &lt;/td&gt;&lt;td&gt;  5.45 &lt;/td&gt;&lt;td&gt;   7.35 &lt;/td&gt;&lt;td&gt;  5.48 &lt;/td&gt;&lt;td&gt;   3.27 &lt;/td&gt;&lt;td&gt;   3.68 &lt;/td&gt;&lt;td&gt;       &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;  32,000 &lt;/td&gt;&lt;td&gt;  112.74 &lt;/td&gt;&lt;td&gt; 21.96 &lt;/td&gt;&lt;td&gt;  30.51 &lt;/td&gt;&lt;td&gt; 22.02 &lt;/td&gt;&lt;td&gt;  13.78 &lt;/td&gt;&lt;td&gt;  13.91 &lt;/td&gt;&lt;td&gt;  12.95&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;  64,000 &lt;/td&gt;&lt;td&gt;         &lt;/td&gt;&lt;td&gt;       &lt;/td&gt;&lt;td&gt; 227.80 &lt;/td&gt;&lt;td&gt;157.03 &lt;/td&gt;&lt;td&gt; 104.94 &lt;/td&gt;&lt;td&gt;  75.95 &lt;/td&gt;&lt;td&gt;  66.54&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 100,000 &lt;/td&gt;&lt;td&gt; 1078.72 &lt;/td&gt;&lt;td&gt;429.32 &lt;/td&gt;&lt;td&gt; 869.43 &lt;/td&gt;&lt;td&gt;596.51 &lt;/td&gt;&lt;td&gt; 428.08 &lt;/td&gt;&lt;td&gt; 260.99 &lt;/td&gt;&lt;td&gt; 231.01&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;                                                                                                             
&lt;/table&gt;                                                                                                             
&lt;p&gt;
For some reason which I don&amp;#8217;t understand yet is PLUQ slower for 16,384 than 20,000 on this machine. The code is &lt;a href="http://bitbucket.org/malb/m4ri/"&gt;on bitbucket&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/xl1osdDG28A" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/06/18#more-m4ri-openmp</feedburner:origLink></item>
  <item>
    <title>Geometric XL</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/5kDLLjF3Nn4/03</link>
    <description>The &lt;a href="http://www.isg.rhul.ac.uk/~sean/JMC-220-Final-LNCS.pdf"&gt;paper&lt;/a&gt; by Sean Murphy and Maura Paterson has been around for quite some time now (same for my toy implementation). Gr&amp;ouml;bner basis algorithms and related methods like XL are algebraic in nature. In particular, their complexity is not invariant under a linear change of coordinates. For example consider Cyclic-6
&lt;/p&gt;
&lt;!--sage: P.&lt;a,b,c,d,e,f,h&gt; = PolynomialRing(GF(32003))
    sage: I = sage.rings.ideal.Cyclic(P,6).homogenize(h)
    sage: J = Ideal(I.groebner_basis())--&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;    
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="o"&gt;.&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PolynomialRing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;32003&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ideal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Cyclic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;homogenize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;J&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ideal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;groebner_basis&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The generators of &lt;b&gt;J&lt;/b&gt; are a Gr&amp;ouml;bner basis and we can use this property to find a common root for these generators. Now, consider the
same equations but permute the variables in the ring.&lt;/p&gt;

&lt;!--sage: P.&lt;a,b,c,d,e,f,h&gt; = PolynomialRing(GF(32003),order='lex')
    sage: I = sage.rings.ideal.Cyclic(P,6).homogenize(h)
    sage: J = Ideal(I.groebner_basis())
    sage: R = PolynomialRing(GF(32003),P.ngens(),list(reversed(P.variable_names())),order='lex')
    sage: H = Ideal([R(str(f)) for f in J.gens()])--&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="o"&gt;.&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PolynomialRing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;32003&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;lex&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ideal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Cyclic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;homogenize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;J&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ideal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;groebner_basis&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PolynomialRing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;32003&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ngens&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reversed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;variable_names&lt;/span&gt;&lt;span class="p"&gt;())),&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;lex&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ideal&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;J&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gens&lt;/span&gt;&lt;span class="p"&gt;()])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The generators of &lt;b&gt;H&lt;/b&gt; do not form a Gr&amp;ouml;bner basis in &lt;b&gt;R&lt;/b&gt; which is just &lt;b&gt;P&lt;/b&gt; with its variables reversed. If we are only trying to solve a system of equations choosing the right permutation of variables might have a significant impact on the performance of our Gr&amp;ouml;bner basis algorithm:&lt;/p&gt;

&lt;!--sage: t = cputime()
    sage: gb = H.groebner_basis('libsingular:std')
    sage: gb[-1].degree()
    19
    sage: cputime(t) # output random-ish
    25.36...
--&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cputime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;groebner_basis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;libsingular:std&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gb&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="mf"&gt;19&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cputime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# output random-ish&lt;/span&gt;
    &lt;span class="mf"&gt;25.36&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;While in this example it is easy to see which variable permutation is the cheapest one, this is not necessarily the case in general. The
GeometricXL algorithm is invariant under any linear change of coordinates and has the following property:&lt;/p&gt; 

&lt;p&gt;&lt;em&gt;Let &lt;b&gt;D&lt;/b&gt; be the degree reached by the XL algorithm to solve a given system of equations under the optimal linear change of coordinates. Then GeometricXL will also solve this system of equations for the degree &lt;b&gt;D&lt;/b&gt;, without applying this optimal linear change of coordinates first.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The above behaviour holds under two assumptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the characteristic of the base field &lt;b&gt;K&lt;/b&gt; is bigger than &lt;b&gt;D&lt;/b&gt; and&lt;/li&gt;
&lt;li&gt;the system of equations has one over &amp;#8220;very few&amp;#8221; solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To demonstrate this behaviour, consider the synthetic benchmark available &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/geometricxl.py"&gt;here&lt;/a&gt; which is a
Gr&amp;ouml;bner basis under a linear change of coordinates:&lt;/p&gt;


&lt;!--sage: e,h = random_example(n=6)--&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random_example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;b&gt;e&lt;/b&gt; is the original easy system while &lt;b&gt;h&lt;/b&gt; is the &amp;#8220;rotated&amp;#8221; system&lt;/p&gt;

&lt;!--    sage: e.basis_is_groebner()
    True

    sage: max([f.total_degree() for f in e.gens()])
    2

    sage: h.basis_is_groebner()
    False

    sage: max([f.total_degree() for f in h.gens()])
    2
--&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basis_is_groebner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="bp"&gt;True&lt;/span&gt;

    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_degree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gens&lt;/span&gt;&lt;span class="p"&gt;()])&lt;/span&gt;
    &lt;span class="mf"&gt;2&lt;/span&gt;

    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basis_is_groebner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_degree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gens&lt;/span&gt;&lt;span class="p"&gt;()])&lt;/span&gt;
    &lt;span class="mf"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/geometricxl.py"&gt;GeometricXL&lt;/a&gt; recovers linear factors and thus candidates for common roots at &lt;b&gt;D=2&lt;/b&gt;:&lt;/p&gt;

&lt;!--sage: hH = h.homogenize()
    sage: f = GeometricXL(hH, D=2); f.factor(False)
    0.0...s - 1. D: 2
    ...
    (-2684) 
    * (-1056*x5 - 2964*x4 - 177*x3 + 6206*x2 + 376*x1 + 6257*x0 + h) 
    * (2957*x5 - 792*x4 - 4323*x3 - 14408*x2 - 2750*x1 - 8823*x0 + h)--&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;homogenize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GeometricXL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="mf"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2684&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1056&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x5&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;2964&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;177&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;6206&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;376&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;6257&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2957&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x5&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;792&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;4323&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;14408&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;2750&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;8823&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;While any Gr&amp;ouml;bner basis algorithm would have to reach at least degree 64:&lt;/p&gt;

&lt;!--sage: gb = h.groebner_basis('libsingular:slimgb')
    sage: gb[-1].degree()
    64
--&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;groebner_basis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;libsingular:slimgb&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gb&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="mf"&gt;64&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;    

&lt;p&gt;
While my &lt;a href=""&gt;toy implementation&lt;/a&gt; is neither robust not efficient, the following table (using the same synthetic benchmark as above) should give some indication that for some problems GeometricXL is a good choice:
&lt;/p&gt;

&lt;table&gt;
&lt;caption&gt;Synthetic Benchmark for GeometricXL Algorithm over GF(32003)&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;n&lt;/th&gt;
&lt;th&gt;GeometricXL degree&lt;/th&gt;
&lt;th&gt;GeometricXL time in seconds&lt;/th&gt;
&lt;th&gt;Singular 3-0-4 time in seconds&lt;/th&gt;
&lt;th&gt;Magma 2.14 time in seconds&lt;/th&gt;
&lt;th&gt;Gr&amp;ouml;bner basis degree&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt; 2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  0.01&lt;/td&gt;&lt;td&gt;  0.00&lt;/td&gt;&lt;td&gt;    0.00&lt;/td&gt;&lt;td&gt;   4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  0.07&lt;/td&gt;&lt;td&gt;  0.00&lt;/td&gt;&lt;td&gt;    0.00&lt;/td&gt;&lt;td&gt;   8&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  0.18&lt;/td&gt;&lt;td&gt;  0.00&lt;/td&gt;&lt;td&gt;    0.00&lt;/td&gt;&lt;td&gt;  16&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  0.37&lt;/td&gt;&lt;td&gt;  0.02&lt;/td&gt;&lt;td&gt;    0.01&lt;/td&gt;&lt;td&gt;  32&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  0.73&lt;/td&gt;&lt;td&gt;  0.12&lt;/td&gt;&lt;td&gt;    0.04&lt;/td&gt;&lt;td&gt;  64&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  1.36&lt;/td&gt;&lt;td&gt;  0.94&lt;/td&gt;&lt;td&gt;    0.09&lt;/td&gt;&lt;td&gt; 128&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 8&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  2.35&lt;/td&gt;&lt;td&gt;  9.59&lt;/td&gt;&lt;td&gt;    0.56&lt;/td&gt;&lt;td&gt; 256&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  4.24&lt;/td&gt;&lt;td&gt;117.43&lt;/td&gt;&lt;td&gt;    3.79&lt;/td&gt;&lt;td&gt; 512&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;  7.34&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;   28.68&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt; 12.08&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;  205.05&lt;/td&gt;&lt;td&gt;2048&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt; 20.03&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;      &amp;#8212;&lt;/td&gt;&lt;td&gt;  &amp;#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt; 35.53&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;      &amp;#8212;&lt;/td&gt;&lt;td&gt;  &amp;#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt; 53.98&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;      &amp;#8212;&lt;/td&gt;&lt;td&gt;  &amp;#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt; 88.36&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;      &amp;#8212;&lt;/td&gt;&lt;td&gt;  &amp;#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;143.16&lt;/td&gt;&lt;td&gt;    &amp;#8212;&lt;/td&gt;&lt;td&gt;      &amp;#8212;&lt;/td&gt;&lt;td&gt;  &amp;#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;While the benchmark is synthetical and unrealistic, there are a few problems in multivariate quadratic public key cryptography which might be tackled using an idea similar to the GeometricXL algorithm. Also, note that constructing a GeometricMatrixF5 algorithm is straight forward by replacing the first step of the algorithm.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/5kDLLjF3Nn4" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/06/03#geometricxl</feedburner:origLink></item>
  <item>
    <title>F4-Style F5 &amp;#8212; Next Attempt</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/ZtH2QCN5J08/20</link>
    <description>Since the F4-style F5 I &lt;a href="http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/25#f4-style-f5"&gt;mentioned&lt;/a&gt; a while ago wasn&amp;#8217;t really that &amp;#8220;F4-style&amp;#8221; I&amp;#8217;ve pushed &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/f5_2.py"&gt;my next attempt&lt;/a&gt; into the public &amp;#8220;algebraic attack&amp;#8221; &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/"&gt;bitbucket repository&lt;/a&gt;. This version swaps the two outer loops, i.e. it proceeds by degree in the outer loop instead of the index of the polynomials. Of course, we are talking about a toy implementation here to understand the algorithm and not an attempt to implement F5 efficiently.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/ZtH2QCN5J08" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/05/20#f4-style-f5-2</feedburner:origLink></item>
  <item>
    <title>SSH Paper Available Online</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/3FPTHp6EDB0/20</link>
    <description>Our paper on plaintext recovery attacks against SSH is now available online both &lt;a href="http://www.informatik.uni-bremen.de/~malb/papers/plaintext_recover_attacks_against_ssh.pdf"&gt;locally&lt;/a&gt; and on Kenny&amp;#8217;s &lt;a href="http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf"&gt;website&lt;/a&gt;. Btw. contrary to popular belief the paper is not on an implementation error in OpenSSH but on a design flaw in the SSHv2 specification which enables a variety of attacks against various implementations of the standard.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/3FPTHp6EDB0" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/05/20#plaintext-recovery-attacks-against-ssh</feedburner:origLink></item>
  <item>
    <title>Funny</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/820bb2RrO9Q/07</link>
    <description>It might very well be just a conincidence, but superficially it looks like &lt;a href="http://www.wolfram.com"&gt;Mathematica&lt;/a&gt; is targeting &lt;a href="http://www.sagemath.org"&gt;Sage&lt;/a&gt; users with ads on Google.
&lt;/p&gt;
&lt;img alt="Mathematica ad" src="http://www.informatik.uni-bremen.de/~malb/binary/mathematica_ad.png" /&gt;
&lt;p&gt;
Source: &lt;a href="http://groups.google.com/group/sage-devel/browse_thread/thread/73f461c63d90f152"&gt;[sage-devel]&lt;/a&gt; &amp;#8230; scroll down to see Harald Schilly debunk the whole thing. Still, it&amp;#8217;s funny.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/820bb2RrO9Q" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/04/07#mathematica-ad</feedburner:origLink></item>
  <item>
    <title>Windows Sage 0.3</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/GN_q-_hQuos/22</link>
    <description>As you might have heard, there is a &lt;a href="http://windows.sagemath.org/"&gt;Windows port&lt;/a&gt; of &lt;a href="http://www.sagemath.org/"&gt;Sage&lt;/a&gt; in the making. While the current version doesn&amp;#8217;t look like  Sage proper, it already ships quite a few building blocks. Since, incidently the &lt;a href="http://isg.rhul.ac.uk"&gt;Information Security Group&lt;/a&gt; is now part of the &amp;#8220;Microsoft Developer Academic Alliance&amp;#8221; &amp;#8212; which grants students free access to their products &amp;#8212; I gave it a quick spin. See below.
&lt;/p&gt;
&lt;img src="http://www.informatik.uni-bremen.de/~malb/binary/windows-sage.png" alt="screenshot of Windows Sage 3.0"/&gt;&lt;br /&gt;
&lt;p&gt;
Installation was straight forward once you have Visual Studio 2008 installed, just call &lt;tt&gt;build.bat&lt;/tt&gt; and wait an hour or so.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/GN_q-_hQuos" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/03/22#windows-sage-0-3-3</feedburner:origLink></item>
  <item>
    <title>M4RI API Change and Big Matrices</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/abznu218SkQ/20</link>
    <description>Finally, I found some time to work on M4RI again: I changed the internal representation of matrices to support more than one &lt;tt&gt;malloc()&lt;/tt&gt; call per matrix, i.e. each matrix is split into blocks of some maximal size. This allows to deal with much bigger matrices under Linux because the kernel often won&amp;#8217;t just give you 8GB mapped to consecutive addresses but it will give you 1GB eight times. This limitation bugged me quite some time now, since this also limited the kind of systems I could solve using &lt;a href="http://polybori.sourceforge.net"&gt;PolyBoRi&lt;/a&gt; with M4RI enabled. The result is available at &lt;a href="http://bitbucket.org/malb/m4ri/"&gt;http://bitbucket.org/malb/m4ri/&lt;/a&gt; but bear in mind that the API changed quite a bit for this (e.g., I renamed the &lt;tt&gt;packedmatrix&lt;/tt&gt; to &lt;tt&gt;mzd_t&lt;/tt&gt;) on the way).
&lt;/p&gt;
&lt;table&gt;
&lt;caption&gt;64-bit Ubuntu, Xeon X7400 @2.66GHz&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Matrix&lt;br /&gt;Dimension&lt;/th&gt;
&lt;th&gt;Memory&lt;br /&gt;(expected)&lt;/th&gt;
&lt;th&gt;M4RI/M4RI &lt;br /&gt;(64-bit, 1 core)&lt;/th&gt;
&lt;th&gt;M4RI/PLUQ &lt;br /&gt;(64-bit, 1 core)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;100,000 x 100,000&lt;/td&gt; &lt;td&gt;&amp;gt; 1.16 GB&lt;/td&gt; &lt;td&gt;1078.72 s&lt;/td&gt; &lt;td&gt; 429.32 s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;200,000 x 200,000&lt;/td&gt; &lt;td&gt;&amp;gt; 4.65 GB&lt;/td&gt; &lt;td&gt;      &amp;#8212; &lt;/td&gt; &lt;td&gt;2298.30 s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;256,000 x 256,000&lt;/td&gt; &lt;td&gt;&amp;gt; 7.63 GB&lt;/td&gt; &lt;td&gt;8979.33 s&lt;/td&gt; &lt;td&gt;3709.25 s&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
The above table gives the time to compute the rank of random matrices of the given dimension using the given algorithms on &lt;a href="http://geom.math.washington.edu"&gt;http://geom.math.washington.edu&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/abznu218SkQ" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/03/20#big-matrices-vs-m4ri</feedburner:origLink></item>
  <item>
    <title>A Simple Bitslice Implementation of PRESENT</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/NknsHSXbX3c/10</link>
    <description>I had a hunch the other day which required $2^{36}$ plaintext&amp;#8212;ciphertext pairs to be tested. While the hunch turned out to be wrong, at least I got a simple 
&lt;a href="http://en.wikipedia.org/wiki/Bit_slicing"&gt;bitslice&lt;/a&gt; implementation of &lt;a href="http://www.ist-ubisecsens.org/publications/present_ches2007.pdf"&gt;PRESENT&lt;/a&gt; (in pure C99) &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/present_bitslice.c"&gt;out of it&lt;/a&gt;. The implementation is far from optimal:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it is pure C but critical paths should be pushed down to assembly,&lt;/li&gt;
&lt;li&gt;it doesn&amp;#8217;t use SSE2&amp;#8217;s 128-bit instructions but it should, and&lt;/li&gt;
&lt;li&gt;the S-Box is hardly optimised (it is simply ANF).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Still, it is better than what I found on the web via a quick Google search. On my 2.33 Ghz Core2Duo Macbook Pro it seems to run at 28 cycles per byte for long messages (not counting the key schedule). For comparison, I think the current speed of AES in bit slice mode is like 10 cycles per byte on the Core2. If I need some performance in the future, I might sit down and improve the implementation (such that it doesn&amp;#8217;t totally suck) but for now I have to attend to other projects.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/NknsHSXbX3c" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/03/10#present_bitslice</feedburner:origLink></item>
  <item>
    <title>Attacking Cryptographic Schemes Based on &amp;#8220;Perturbation Polynomials&amp;#8221;</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/2O_vz5UQbls/02</link>
    <description>&amp;#8220;We show attacks on several cryptographic schemes that have recently been proposed for achieving various security goals in sensor networks. Roughly speaking, these schemes all use &amp;#8220;perturbation polynomials&amp;#8221; to add &amp;#8220;noise&amp;#8221; to polynomial-based systems that offer information-theoretic security, in an attempt to increase the resilience threshold while maintaining efficiency. We show that the heuristic security arguments given for these modified schemes do not hold, and that they can be completely broken once we allow even a slight extension of the parameters beyond those achieved by the underlying information-theoretic schemes. 

Our attacks apply to the key predistribution scheme of Zhang et al. (MobiHoc~2007), the access-control schemes of Subramanian et al. (PerCom~2007), and the authentication schemes of Zhang et~al. (INFOCOM~2008).&amp;#8221;
&lt;/p&gt;
&lt;p&gt;
That&amp;#8217;s the abstract of a paper of &lt;a href="http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/g/Gentry:Craig.html"&gt;Craig Gentry&lt;/a&gt;, &lt;a href="http://people.csail.mit.edu/shaih/"&gt;Shai Halevi&lt;/a&gt;, &lt;a href="http://www.cs.umd.edu/~jkatz/"&gt;Jonathan Katz&lt;/a&gt; and myself which just &lt;a href="http://eprint.iacr.org/2009/098"&gt;appeared on eprint&lt;/a&gt;. The source code for the experiments conducted in that work is available at &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/noise_poly.py"&gt;bitbucket&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/2O_vz5UQbls" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/03/02#perturbation-polynomials</feedburner:origLink></item>
  <item>
    <title>Sage hits Debian/unstable</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/Z2aOIrVZ81w/02</link>
    <description>As &lt;em&gt;jzmer&lt;/em&gt; just pointed out on #sage-devel, &lt;a href="http://www.sagemath.org/"&gt;Sage&lt;/a&gt; hit &lt;a href="http://packages.debian.org/sid/sagemath"&gt;Debian/unstable&lt;/a&gt; today-ish. Of course, this also means that the wealth of math software Sage ships (e.g., &lt;a href="http://www.singular.uni-kl.de/"&gt;Singular&lt;/a&gt;) is now also &lt;a href="http://packages.debian.org/sid/singular"&gt;available&lt;/a&gt; in Debian/unstable. Well done &lt;a href="http://web.mit.edu/tabbott/www/"&gt;Tim&lt;/a&gt;!
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt;Carl &amp;#8212; also on IRC &amp;#8212; points out that there are issues with the binary shipped with Debian as of now. Hopefully, this will get resolved quickly.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/Z2aOIrVZ81w" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/02/02#sage-hits-debian-unstable</feedburner:origLink></item>
  <item>
    <title>Semi-Regular Bits and Pieces</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/67h9jGNeyrE/28</link>
    <description>&lt;a href="http://www.math.usm.edu/perry/"&gt;John Perry&lt;/a&gt;&amp;#8217;s &lt;a href="http://wiki.sagemath.org/days12?action=AttachFile&amp;amp;do=view&amp;amp;target=F5SageDays12.pdf"&gt;slides&lt;/a&gt; from his talk at Sage Days 12 in San Diego are available on the &lt;a href="http://wiki.sagemath.org/"&gt;Sage wiki&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
In my &lt;a href="http://www.informatik.uni-bremen.de/~malb/binary/thesis-1.0.pdf"&gt;Diplomarbeit&lt;/a&gt; I had an algorithm for computing Gr&amp;ouml;bner bases of block ciphers called &amp;#8220;Gr&amp;ouml;bner surfing&amp;#8221;: &amp;#8220;Instead of computing a reduced Gr&amp;ouml;bner basis for all rounds $rgb_F$ it computes the reduced Gr&amp;ouml;bner basis $rgb_{i+1}$ up to round $i + 1$ recursively as $$rgb_{i+1} = rgb(gb_i + round_{i+1})$$ with $rgb_0 = rgb(round_0)$ where $$rgb(round_i)$$ denotes any algorithm returning a reduced Gr&amp;ouml;bner basis for a given finite set of polynomials $round_i$.&amp;#8221; This obviously is a tiny subset of what $F_5$ does: computing the Gr&amp;ouml;bner basis for $\langle f_i,\dots,f_m \rangle$ from the Gr&amp;ouml;bner basis of $\langle f_{i+1},\dots,f_m \rangle$. So nothing new here, move along.
&lt;/p&gt;
&lt;p&gt;
I&amp;#8217;m going to the &lt;a href="https://www.cosic.esat.kuleuven.be/fse2009/index.shtml"&gt;Fast Software Encryption&lt;/a&gt; (FSE) 2009 workshop in Leuven to present our paper &amp;#8220;Algebraic Techniques in Differential Cryptanalysis&amp;#8221;. The full list of accepted papers is &lt;a href="https://www.cosic.esat.kuleuven.be/fse2009/program.shtml"&gt;available&lt;/a&gt; online.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/67h9jGNeyrE" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/28#bits-and-pieces-2009-01</feedburner:origLink></item>
  <item>
    <title>F4-Style F5</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/oxT8_et9kgk/25</link>
    <description>When I asked Jean-Charles Faug&amp;egrave;re a while back why he doesn&amp;#8217;t publish his F4-style F5 he answered that there would be nothing to publish since it is straight forward. I don&amp;#8217;t know about that but I was actually quite surprised how quickly &lt;a href="http://www.math.usm.edu/perry/"&gt;John Perry&lt;/a&gt; and I could come up with an F4-style F5 here at &lt;a href="http://wiki.sagemath.org/days12"&gt;Sage Days 12&lt;/a&gt; (&lt;a href="http://www.flickr.com/photos/martinralbrecht/tags/sagedays12/"&gt;pictures&lt;/a&gt;). Btw. Till Stegers calls this F4.5 but I don&amp;#8217;t know how Jean-Charles Faug&amp;egrave;re refers it.
&lt;/p&gt;
&lt;p&gt;
I&amp;#8217;ve uploaded the toy implementation to &lt;a href="http://bitbucket.org/malb/algebraic_attacks/src/tip/f5.py"&gt;bitbucket&lt;/a&gt;. It seems to behave like the polynomial F5 implementation in the same file, so at least it is bug by bug compatible with that. Speaking of behaviour: When computing Cyclic-6 over $\mathbb{F}_{32003}$ w.r.t. &lt;em&gt;degrevlex&lt;/em&gt; I noticed that my F4 implementation only goes up to degree 16 while my F5 implementations need to consider degree 18. Although no matrix is constructed for degree 18, the F4-style F5 does construct and eliminate a matrix for degree 17 &amp;#8230; puzzling.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/oxT8_et9kgk" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/25#f4-style-f5</feedburner:origLink></item>
  <item>
    <title>Bitslicing and the Method of the Four Russians over Larger Finite Fields</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/f4zmK-7oRLM/16</link>
    <description>Tom Boothby&amp;#8217;s and Robert Bradshaw&amp;#8217;s paper on the &amp;#8220;Method of the Four Russian&amp;#8221; multiplication algorithm over $\mathbb{F}_3$, $\mathbb{F}_5$, $\mathbb{F}_7$, $\mathbb{F}_{2^2}$ and $\mathbb{F}_{2^3}$ is &lt;a href="http://arxiv.org/abs/0901.1413"&gt;available&lt;/a&gt; as pre-print on the arXiv. If you&amp;#8217;re into fast exact linear algebra I highly recommend reading it since it has some really nice ideas in it and is well written.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Abstract&lt;/b&gt;. &amp;#8220;We present a method of computing with matrices over very small finite fields of size larger than 2. Specifically, we show how the Method of Four Russians can be efficiently adapted to these larger fields, and introduce a row-wise matrix compression scheme that both reduces memory requirements and allows one to vectorize element operations. We also present timings which confirm the efficiency of these methods and exceed the speed of the fastest implementations the authors are aware of.&amp;#8221;&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/f4zmK-7oRLM" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/16#m4ri-larger-fields</feedburner:origLink></item>
  <item>
    <title>F5 Sans Rewriting</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/JvhT8PK68mk/12</link>
    <description>In his &lt;a href="http://wiki.sagemath.org/days12/f5"&gt;PhD thesis&lt;/a&gt; Justin Gash writes: &amp;#8220;Rewritten gives us information to be used as an additional criterion for eliminating critical pairs. &amp;#8230; In short, we could remove all discussion of rules and Rewritten and F5 would work fine. (But it would work much more slowly.)&amp;#8221;
&lt;/p&gt;
&lt;p&gt;
This motivated an &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/f5.py"&gt;implementation&lt;/a&gt; of &lt;em&gt;F5SansRewriting&lt;/em&gt; which removes all mentions of Rewriting to make it easier to solely focus on the F5 criterion first. Of course the result is horribly inefficient. Cyclic-5 over $Z_{32003}$ takes 0.15 seconds using &lt;em&gt;F5&lt;/em&gt; and 81520.64 seconds using &lt;em&gt;F5SansRewriting&lt;/em&gt; &amp;#8230; well, at least it gives correct results and hopefully helps somehow.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/JvhT8PK68mk" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/12#f5-sans-rewriting</feedburner:origLink></item>
  <item>
    <title>&amp;#8220;What Every Programmer Should Know About Memory&amp;#8221;</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/bbhNOETrsRk/09</link>
    <description>is the title of an &lt;a href="http://people.redhat.com/drepper/cpumemory.pdf"&gt;interesting paper&lt;/a&gt; by Ulrich Drepper of Rad Hat, Inc. The paper is &amp;#8212; as you might have guessed &amp;#8212; about the memory architecture in modern CPUs and what you &amp;#8212; dear programmer &amp;#8212; can do to improve performance of your code based on this knowledge.

The paper has a section on tools for performance tuning which also discusses &lt;a href="http://oprofile.sourceforge.net/news/"&gt;OProfile&lt;/a&gt;. OProfile is an interface to the CPU&amp;#8217;s event counters (which vary across platforms). These counters can be queried to investigate the behaviour of a given piece of code on a given CPU. Intel&amp;#8217;s &lt;a href="http://www.intel.com/products/processor/manuals/"&gt;Intel 64 and IA-32 Architectures Optimization Reference Manual&lt;/a&gt; suggests a list of event counters to look at. For instance the Intel engineers write:
&lt;/p&gt;
&lt;p&gt;
&amp;#8220;&lt;b&gt;Clocks Per Instruction Retired Ratio (CPI): CPU_CLK_UNHALTED.CORE / INST_RETIRED.ANY.&lt;/b&gt;
The Intel Core microarchitecture is capable of reaching CPI as low as &lt;em&gt;0.25 in ideal situations&lt;/em&gt;. But most of the code has higher CPI The greater value of CPI for a given workload indicate it has more opportunity for code tuning to improve performance. The CPI is an overall metric, it does not provide specificity of what microarchitectural sub-system may be contributing to a high CPI value.&amp;#8221;
&lt;/p&gt;
&lt;p&gt;To take it for a spin I chose the obvious target: the libM4RI library. Below is the CPI for &lt;tt&gt;bench_elimination 20000 20000 pluq&lt;/tt&gt;.&lt;/p&gt;
&lt;pre&gt;
== UNIFORMLY RANDOM ==
                        symbol  CPI  % of overall time
------------------------------------------------------
                 _mzd_mul_m4rm  0.94 (49.68)
              mzd_process_rows  1.76 (13.68)
                          .plt  0.62 (10.47)
        mzd_process_rows2_pluq  1.88 (10.07)
                mzd_make_table  0.76 ( 8.31)
                      mzd_copy  1.85 ( 1.80)
                _mzd_mul_naive  1.10 ( 1.38)
       mzd_apply_p_right_trans  0.99 ( 1.14)
     _mzd_trsm_lower_left_even  0.75 ( 0.94)
             mzd_apply_p_right  0.81 ( 0.93)
                   mzd_combine  3.17 ( 0.61)

&lt;/pre&gt;
&lt;p&gt;
Note that &lt;tt&gt;mzd_process_rows()&lt;/tt&gt; and &lt;tt&gt;mzd_process_rows2_pluq()&lt;/tt&gt; (which are both called from the PLUQ MMPF base case) have a rather high CPI compared to the rest of the code, indicating that I should sit down and implement using more than two tables (multiplication uses eight tables). I don&amp;#8217;t understand the high CPI for &lt;tt&gt;mzd_copy()&lt;/tt&gt; though. Half rank matrices behave quite differently, but surprisingly the CPI for &lt;tt&gt;mzd_apply_p_right_trans()&lt;/tt&gt; is rather low.
&lt;/p&gt;
&lt;pre&gt;
== HALF RANK ==
                        symbol  CPI  % of overall time
------------------------------------------------------
                 _mzd_mul_m4rm  0.93 (40.01)
       mzd_apply_p_right_trans  0.79 (10.05)
             mzd_apply_p_right  0.78 ( 7.44)
                mzd_make_table  0.75 ( 7.26)
                mzd_find_pivot  1.44 ( 6.00)
                          .plt  0.68 ( 5.64)
                _mzd_pluq_mmpf  1.58 ( 4.58)
           _mzd_pluq_submatrix  0.90 ( 3.88)
                  mzd_col_swap  1.20 ( 3.58)
              mzd_process_rows  1.76 ( 2.85)
            mzd_row_add_offset  1.61 ( 2.24)
        mzd_process_rows2_pluq  1.88 ( 2.10)
                _mzd_mul_naive  1.19 ( 1.49)
                      mzd_copy  2.17 ( 1.32)
                   mzd_combine  3.31 ( 0.89)
     _mzd_trsm_lower_left_even  0.75 ( 0.25)
     _mzd_trsm_upper_left_even  0.67 ( 0.13)
               mzd_init_window  1.24 ( 0.07)
&lt;/pre&gt;
&lt;p&gt;
My preliminary understanding of those high &lt;tt&gt;.plt&lt;/tt&gt; values is that compiling the benchmarketing software with &lt;tt&gt;-static&lt;/tt&gt; would improve the timings (or that I should inline more?).&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/bbhNOETrsRk" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/09#memory</feedburner:origLink></item>
  <item>
    <title>PhD Thesis on F5</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/Gi1atcXcWIg/07</link>
    <description>May I point my dear reader&amp;#8217;s attention to Justin Gash&amp;#8217;s &lt;a href="http://wiki.sagemath.org/days12/f5"&gt;PhD thesis&lt;/a&gt; on F5. It is mainly referred to because it points out an error in the proof of termination in the original F5 paper. I started reading the thesis today (in preparation of &lt;a href="http://wiki.sagemath.org/days12"&gt;SD12&lt;/a&gt; in San Diego) and it already helped me a lot to understand the algorithm. As a consequence I added a bunch of comments from Justin&amp;#8217;s thesis to my &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/f5.py"&gt;toy F5 implementation&lt;/a&gt; which should explain a bit what is going on.
&lt;/p&gt;
&lt;p&gt;
However, since Justin&amp;#8217;s pseudocode is not identical with John Perry&amp;#8217;s pseudocode (on which my implementation is based) things don&amp;#8217;t match up perfectly. For instance, I still need to figure out what the differences in &lt;tt&gt;critical_pair&lt;/tt&gt; exactly come down to.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/Gi1atcXcWIg" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/07#phd-thesis-on-f5</feedburner:origLink></item>
  <item>
    <title>M4RI-20090105 Released</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/XZjsOMHnXL4/05</link>
    <description>Sources are available for &lt;a href="http://m4ri.sagemath.org/downloads/"&gt;download&lt;/a&gt;. See &lt;a href="http://www.bitbucket.org/malb/m4ri/wiki/M4RI-20090105"&gt;release notes&lt;/a&gt; for details about what changed since the last version and some timings (&lt;a href="http://m4ri.sagemath.org/performance.html"&gt;1&lt;/a&gt;, 
&lt;a href="http://www.bitbucket.org/malb/m4ri/wiki/Timings"&gt;2&lt;/a&gt;, 
&lt;a href="http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/12/23#m4ri-density"&gt;3&lt;/a&gt;, 
&lt;a href="http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/03#m4ri-200901"&gt;4&lt;/a&gt;) to get an idea of the performance.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/XZjsOMHnXL4" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/05#m4ri-20090105-released</feedburner:origLink></item>
  <item>
    <title>New M4RI Release Coming Up</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/Tc-y3rA6gfk/03</link>
    <description>I will probably cut a new &lt;a href="http://m4ri.sagemath.org"&gt;M4RI&lt;/a&gt; release within a week or so. The main changes are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Asymptotically Fast PLUQ Factorisation&lt;/b&gt; [&lt;tt&gt;mzd_pluq()&lt;/tt&gt; and &lt;tt&gt;_mzd_pluq_mmpf()&lt;/tt&gt;] due to Cl&amp;eacute;ment Pernet and myself:
This enables asymptotically fast rank computation, row echelon forms and rank profiles. However, don&amp;#8217;t hold your breath yet because the code is not really optimised yet. While it is &lt;a href="http://www.bitbucket.org/malb/m4ri/wiki/Timings"&gt;faster&lt;/a&gt; than M4RI for random dense matrices it is slower for sparse-ish and structured matrices (see image below).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;System Solving&lt;/b&gt; [&lt;tt&gt;mzd_solve_left()&lt;/tt&gt;]: Jean-Guillaume Dumas wrote a high-level wrapper around the PLUQ and TRSM routines to provide linear system solving.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;M4RI Performance Improvement&lt;/b&gt; [&lt;tt&gt;mzd_echelonize_m4ri()&lt;/tt&gt;]: A bug was fixed in M4RI which resulted in poor performance of M4RI for sparse-ish matrices (see &lt;a href="http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/12/23#m4ri-density"&gt;my blog post &lt;/a&gt; for details).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Refactoring&lt;/b&gt;: A few functions where added, deleted and renamed. This release will break source compatibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://www.informatik.uni-bremen.de/~malb/binary/pluq-m4ri-magma-10000-r246.png" alt="PLUQ/M4RI/Magma" /&gt;
&lt;p&gt;
On a related note: Marco Bodrato came up with a new &lt;a href="http://marco.bodrato.it/papers/Bodrato2008-StrassenLikeMatrixMultiplicationForSquares.pdf"&gt;Strassen-like sequence&lt;/a&gt; for multiplying and squaring matrices which provides a small (linear) speed-up for squaring. He also provides a drop-in &lt;a href="http://bodrato.it/software/strassen.html#M4R"&gt;strassen.c&lt;/a&gt; replacement for M4RI-20080521 which implements his new sequence.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/Tc-y3rA6gfk" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2009/01/03#m4ri-200901</feedburner:origLink></item>
  <item>
    <title>M4RI&amp;#8217;s and MMPF&amp;#8217;s Sensitivity to Density</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/6K83gipLUGs/23</link>
    <description>The last couple of days I&amp;#8217;ve been working on improving libM4RI for sparse-ish matrices. The matrices I am talking about here are still represented as dense matrices but have non-uniformly distributed entries. While PLUQ factorisation is still very very (very very) slow for e.g. half rank matrices, things are getting better for M4RI matrix elimination.
&lt;/p&gt;
&lt;img src="http://www.informatik.uni-bremen.de/~malb/binary/m4ri-r219-vs-r221.png" alt="r219 vs. r221" /&gt;
&lt;p&gt;
The &lt;a href="http://www.bitbucket.org/malb/m4ri/src/221/src/brilliantrussian.c"&gt;updated&lt;/a&gt; sources are available on bitbucket. I will probably cut a new release very early next year.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/6K83gipLUGs" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/12/23#m4ri-density</feedburner:origLink></item>
  <item>
    <title>Bit Bucket</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/fB0POepACXQ/13</link>
    <description>About three weeks ago I discovered &lt;a href="http://www.bitbucket.org/"&gt;Bitbucket&lt;/a&gt;: a web service (with free and paid-for plans) for hosting &lt;a href="http://www.selenic.com/mercurial/wiki/"&gt;Mercurial&lt;/a&gt; repositories. So far it has everything I would want:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a free plan with 150MB of disk space, one private repository and as many public repositories as you like;&lt;/li&gt;
&lt;li&gt;the offer to host your open-source project even if it is bigger than 150MB;&lt;/li&gt;
&lt;li&gt;optional issue trackers and wikis (which are also under revision control) for each repository;&lt;/li&gt;
&lt;li&gt;convenient online source code browsing, viewing/comparison of changesets, downloads;&lt;/li&gt;
&lt;li&gt;push/pull via SSH (with public keys) and HTTPS;&lt;/li&gt;
&lt;li&gt;straight-forward management of read/write access control for each repository;&lt;/li&gt;
&lt;li&gt;and all kinds of third party service integrations (&lt;em&gt;twittering&lt;/em&gt; your changesets and such).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I&amp;#8217;m now &lt;a href="http://www.bitbucket.org/malb/m4ri/"&gt;hosting&lt;/a&gt; the main &lt;a href="http://m4ri.sagemath.org"&gt;M4RI&lt;/a&gt; repository on bitbucket and so far it is a very smooth experience. Speaking of M4RI, it now contains an implementation of PLUQ factorisation inspired by Greg&amp;#8217;s M4RI algorithm dubbed &amp;#8220;&lt;b&gt;M&lt;/b&gt;ethod of &lt;b&gt;M&lt;/b&gt;any &lt;b&gt;P&lt;/b&gt;eople &lt;b&gt;F&lt;/b&gt;actorisation&amp;#8221; in &lt;a href="http://www.bitbucket.org/malb/m4ri/diff/src/brilliantrussian.c"&gt;brilliantrussian.c&lt;/a&gt;. While this implementation seems to do its job, we still have iron out a couple of bugs in the recursive PLUQ factorisation codebase. 
&lt;/p&gt;
&lt;p&gt;
Finally, some random code snippets I posted on this blog are now also &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/"&gt;available on bitbucket&lt;/a&gt; (e.g., &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/f4.py"&gt;F4&lt;/a&gt;, &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/f5.py"&gt;F5&lt;/a&gt;, &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/f5matrix.py"&gt;Matrix F5&lt;/a&gt;, &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/des.py"&gt;DES&lt;/a&gt; equation system generators, &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/present.py"&gt;Present&lt;/a&gt; equation system generators, an &lt;a href="http://www.bitbucket.org/malb/algebraic_attacks/src/tip/anf2cnf.py"&gt;ANF to CNF&lt;/a&gt; converter).&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/fB0POepACXQ" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/12/13#bitbucket-m4ri-code-snippets</feedburner:origLink></item>
  <item>
    <title>Reactions to CPNI-957037: Vulnerability in SSH</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/pNr9u2aGCRQ/13</link>
    <description>&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;OpenSSH&lt;/b&gt; published a &lt;a href="http://www.openssh.org/txt/cbc.adv"&gt;&amp;#8220;Statement on &amp;#8216;Plaintext Recovery Attack Against SSH&amp;#8217; (CPNI-957037)&amp;#8221;&lt;/a&gt; and committed a first &lt;a href="http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/packet.c?sortby=date"&gt;fix&lt;/a&gt;. Both the statement and the bugfix only address the OpenSSH specific attack from the advisory. &amp;#8220;A variant of the attack against OpenSSH in the standard configuration can verifiably recover 14  bits of plaintext with probability $2^{-14}$.&amp;#8221; (&lt;a href="http://www.cpni.gov.uk/Docs/Vulnerability_Advisory_SSH.txt"&gt;CPNI-957037&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SunSSH&lt;/b&gt;&amp;#8217;s Jan Pechanec &lt;a href="http://blogs.sun.com/janp/entry/on_sunssh_versioning"&gt;writes&lt;/a&gt;: &amp;#8220;For the first time we increased SunSSH version in OpenSolaris just because of a security vulnerability, to 1.3&amp;#8221;. However, it seems they only &lt;a href="http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/ssh/libssh/common/packet.c"&gt;fixed&lt;/a&gt; the $2^{-14}$ attack. Sun also issued a &lt;a href="http://sunsolve.sun.com/search/document.do?assetkey=1-66-247186-1"&gt;security advisory&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SSH.com&lt;/b&gt; issued a &lt;a href="http://www.ssh.com/company/news/article/953/"&gt;security advisory&lt;/a&gt; and acknowledged that their products are vulnerable. However, no probabilities are given. The company claims to have fixed the issue in their latest line of products. I don&amp;#8217;t know what their fix is.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WinSSHD&lt;/b&gt; &lt;a href="http://www.bitvise.com/winsshd-history"&gt;acknowledged&lt;/a&gt; that their product is vulnerable and issued an update which successfully (as far as I know) prevents the attack: &amp;#8220;Our mitigation in WinSSHD 5.03 attempts to thwart this attack by denying the attacker any means of distinguishing a successful attempt from an unsuccessful one. This only protects data flowing in the direction to WinSSHD (e.g. the client&amp;#8217;s password). Clients which do not implement similar mitigation can still allow this attack to succeed, when CBC is used, for data flowing from WinSSHD.&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Dropbear&lt;/b&gt;&amp;#8217;s &lt;a href="http://matt.ucc.asn.au/dropbear/CHANGES"&gt;0.52 release&lt;/a&gt; added &amp;#8220;counter mode cipher support, which avoids some security problems with the standard CBC mode.&amp;#8221; on November 12th.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt;The US-Cert vulnerability note is &lt;a href="http://www.kb.cert.org/vuls/id/958563"&gt;VU#958563&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/pNr9u2aGCRQ" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/12/13#reactions-to-cpni-957037</feedburner:origLink></item>
  <item>
    <title>Talk on Matrix F5</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/jquT68OPqec/27</link>
    <description>&amp;#8220;We will &lt;a href="http://www.informatik.uni-bremen.de/~malb/talks/20081127%20-%20MatrixF5%20-%20Egham.pdf"&gt;describe&lt;/a&gt; the &amp;#8216;Matrix F5&amp;#8217; algorithm. Although not presented as an algorithm there, this algorithm appears on the first pages of Jean-Charles Faugere&amp;#8217;s famous &lt;a href="http://www-spaces.lip6.fr/@papers/F02a.pdf"&gt;F5 paper&lt;/a&gt; to explain the main idea of F5 itself. It was later described in several French PhD theses but never formally published in English. The talk is titled &amp;#8216;for the working cryptographer&amp;#8217; because we are going to start from the relatively well known XL algorithm and extend it to Matrix F5.&amp;#8221;&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/jquT68OPqec" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/11/27#matrix-f5-talk</feedburner:origLink></item>
  <item>
    <title>CPNI-957037: Vulnerability in SSH</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/5HX7Z2GdfaQ/14</link>
    <description>&lt;b&gt;Abstract:&lt;/b&gt;&lt;a href="http://www.cpni.gov.uk/Products/3716.aspx"&gt;Vulnerability
found&lt;/a&gt; in the network protocol SSH (Secure Shell), that allows data
to be exchanged using a secure channel between two networked
devices. A design flaw in the SSH specification allows an attacker
with control over the network to recover up to 32 bits of plaintext
from an SSH-protected connection in the standard configuration. The success
probability in recovering 32 plaintext bits is $2^{-18}$ when attacking 
the OpenSSH implementation of the SSH RFCs. A variant of the attack
against the OpenSSH implementation verifiably recovers 14 plaintext bits with
probability $2^{-14}$. The recovered bits come from an arbitrary,
attacker-selected block of ciphertext. The success probabilities for 
other implementations are unknown (but are potentially much higher).
&lt;/p&gt;
&lt;p&gt;
See also: &lt;a href="http://ssh.com/company/news/2008/english/security/article/953/"&gt;SSH.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt; Added &amp;#8220;verifiably&amp;#8221; for the 14-bit attack to point out
that this attack is strictly better than guessing 14 bits. CPNI will
probably update the advisory too.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/5HX7Z2GdfaQ" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/11/14#ssh</feedburner:origLink></item>
  <item>
    <title>&amp;#8220;Efficient Multiplication of Dense Matrices over GF(2)&amp;#8221;</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/Jo8-tmEYCsY/12</link>
    <description>&amp;#8220;&lt;a href="http://arxiv.org/abs/0811.1714"&gt;We describe&lt;/a&gt; an efficient implementation of a hierarchy of algorithms for multiplication of dense matrices over the field with two elements (GF(2)). In particular we present our implementation - in the M4RI library - of Strassen-Winograd matrix multiplication and the &amp;#8220;Method of the Four Russians&amp;#8221; multiplication (M4RM) and compare it against other available implementations. Good performance is demonstrated on on AMD&amp;#8217;s Opteron and particulary good performance on Intel&amp;#8217;s Core 2 Duo. The open-source M4RI library is available stand-alone as well as part of the Sage mathematics software.
&lt;/p&gt;
&lt;p&gt;
In machine terms, addition in GF(2) is logical-XOR, and multiplication is logical-AND, thus a machine word of 64-bits allows one to operate on 64 elements of GF(2) in parallel: at most one CPU cycle for 64 parallel additions or multiplications. As such, element-wise operations over GF(2) are relatively cheap. In fact, in this paper, we conclude that the actual bottlenecks are memory reads and writes and issues of data locality. We present our empirical findings in relation to minimizing these and give an analysis thereof.&amp;#8221;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Related News:&lt;/b&gt; My shiny new version of Magma 2.14-17 seems to perform better than Magma 2.14-14 for matrix multiplication over $\mathbf{F}_2$ on the Core 2 Duo. So I updated the &lt;a href="http://m4ri.sagemath.org/performance.html"&gt;performance data&lt;/a&gt; on the M4RI website. However, the &lt;a href="https://magma.maths.usyd.edu.au/magma/export/changelog.shtml"&gt;changelog&lt;/a&gt; doesn&amp;#8217;t mention any improvements in this area. Btw. &lt;a href="http://www.google.com/search?q=Magma+2.14"&gt;searching for &amp;#8220;Magma 2.14&amp;#8221;&lt;/a&gt; returns the M4RI website first for me, which feels wrong on so many levels. Finally, M4RI is &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=470173"&gt;being packaged&lt;/a&gt; for Fedora Core.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/Jo8-tmEYCsY" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/11/12#m4ri-matmul-paper</feedburner:origLink></item>
  <item>
    <title>Yet Another Talk on Sage</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/jYOOMxBWmfw/06</link>
    <description>Today, I gave a talk on Sage to the ISG PhD seminar at Royal Holloway. I think it went alright, although people around here just don&amp;#8217;t get excited about computation that much. Anyway, I&amp;#8217;ve uploaded the &lt;a href="http://www.informatik.uni-bremen.de/~malb/talks/20081106%20-%20Sage%20-%20Egham.pdf"&gt;slides&lt;/a&gt; and the demo (&lt;a href="http://www.informatik.uni-bremen.de/~malb/talks/20081106%20-%20Sage%20-%20Egham%20-%20Demo.pdf"&gt;pdf&lt;/a&gt;, &lt;a href="http://www.informatik.uni-bremen.de/~malb/talks/20081106%20-%20Sage%20-%20Egham%20-%20Demo.sws"&gt;worksheet&lt;/a&gt;).&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/jYOOMxBWmfw" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/11/06#sage-talk-200811-egham</feedburner:origLink></item>
  <item>
    <title>Algebraic Attacks against Block Ciphers</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/ja9EG94Ib4g/30</link>
    <description>That&amp;#8217;s the title of the &lt;a href="http://www.informatik.uni-bremen.de/~malb/talks/20081029%20-%20Algebraic%20Attacks%20-%20Cambridge.pdf"&gt;15 minute talk&lt;/a&gt; I gave yesterday at Cambridge to &lt;a href="http://www.maths.cam.ac.uk/postgrad/casm/"&gt;Part 3&lt;/a&gt; students. It is basically a refurbished version of a talk I gave in March 2007 in Seattle. Also, I was asked to forward this:
&lt;/p&gt;
&lt;p&gt;
&amp;#8220;&lt;a href="http://www.beyondpartiii.org/"&gt;Beyond Part III&lt;/a&gt; will take place over 16-18 April 2009 at the Centre for Mathematical Sciences, University of Cambridge.
&lt;/p&gt;
&lt;p&gt;
Our aim is to develop a stronger network between mathematics graduate communities in the UK and internationally. We would like to emphasise that Beyond Part III is open to all mathematical researchers at the start of their career, whether or not they did Part III. The majority of participants are likely to be those who began a PhD in mathematics within the last five years, but this is a guideline only.
&lt;/p&gt;
&lt;p&gt;
A dozen sessions covering different research areas will be run for one and a half days. Most participants will present work and each session will also include a keynote talk from a more senior researcher in that field. Beyond Part III will enable young mathematicians working in similar areas to form new links, and so plenty of social events are also planned. &amp;#8230;&amp;#8221;&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/ja9EG94Ib4g" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/10/30#algebraic-attacks-part3</feedburner:origLink></item>
  <item>
    <title>Matrix F5</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/cbHa6mOYcx8/26</link>
    <description>I finally fixed my &lt;a href="http://www.informatik.uni-bremen.de/~malb/binary/f5matrix.py"&gt;Matrix $F_5$ implementation&lt;/a&gt;. I&amp;#8217;ll also give a talk about Matrix $F_5$ to the PhD seminar at &lt;a href="http://www.isg.rhul.ac.uk/"&gt;ISG&lt;/a&gt; on November 27th. I&amp;#8217;ll the post the slides around then for those interested.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/cbHa6mOYcx8" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/10/26#matrix-f5-fixed</feedburner:origLink></item>
  <item>
    <title>Bits and Pieces</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/GkUXkuWtAIo/20</link>
    <description>I spent last week at &lt;a href="http://wiki.sagemath.org/days10"&gt;Sage Days 10&lt;/a&gt; (&lt;a href="http://picasaweb.google.com/wstein/10"&gt;pictures&lt;/a&gt; and &lt;a href="http://picasaweb.google.co.uk/j.spies88/SageDays10AtNancy?authkey=S6KBCzf-v34#"&gt;more pictures&lt;/a&gt;) in Nancy, France which turned out to be a very nice event. I (together with &lt;a href="http://users.minet.uni-jena.de/~king/eindex.html"&gt;Simon King&lt;/a&gt;, &lt;a href="http://www.mfo.de/organisation/institute/brickenstein/"&gt;Michael Brickenstein&lt;/a&gt; and &lt;a href="http://www-spiral.lip6.fr/~perret/"&gt;Ludovic Perret&lt;/a&gt;) spent most of my time working on various toy implementations of &lt;a href="http://fgbrs.lip6.fr/%40papers/F02a.pdf"&gt;F5&lt;/a&gt; in order to understand the algorithm (better). We also conversed with &lt;a href="http://www.math.usm.edu/perry/"&gt;John Perry&lt;/a&gt; who&amp;#8217;s &lt;a href="http://www.math.usm.edu/perry/Research/F5Pseudocode.pdf"&gt;pseudcode&lt;/a&gt;, &lt;a href="http://www.math.usm.edu/perry/Research/f5_library.lib"&gt;Singular&lt;/a&gt; code and description of F5 was incredibly helpful (and motivated me to work on this project in the first place, btw). My &lt;a href="http://www.informatik.uni-bremen.de/~malb/binary/f5.py"&gt;toy implementation&lt;/a&gt; of the polynomial version of F5 is available online and so is Simon King&amp;#8217;s &lt;a href="http://wiki.sagemath.org/days10/CodingSprint"&gt;Cython implementation&lt;/a&gt; for Sage. John Perry now also provides a &lt;a href="http://www.math.usm.edu/perry/Research/f5_sugar.py"&gt;non-homogeneous version of F5&lt;/a&gt; based on my &lt;a href="http://www.sagemath.org"&gt;Sage&lt;/a&gt; implementation.
&lt;/p&gt;
&lt;p&gt;I also implemented
a &lt;a href="http://www.informatik.uni-bremen.de/~malb/binary/f5matrix.py"&gt;toy
version&lt;/a&gt; of F5/Matrix which indeed avoids a fair number of zero
reductions and returns a Groebner basis if $d_{max}$ is big enough. I
don&amp;#8217;t think it does avoid as many reductions as the polynomial version
which indicates a problem in my code. Note, that F5/Matrix is
not described in detail in English literature (if you speak French and
want to translate some short notes on this algorithms to English,
please let me know).
&lt;/p&gt;

&lt;p&gt;
I didn&amp;#8217;t work on &lt;a href="http://m4ri.sagemath.org"&gt;M4RI&lt;/a&gt; during Sage Days 10 but &lt;a href="http://www.math.washington.edu/~pernet/"&gt;Clement Pernet&lt;/a&gt; and &lt;a href="http://ljk.imag.fr/membres/Jean-Guillaume.Dumas/"&gt;Jean-Guillaume Dumas&lt;/a&gt; did. We will probably release a new version with tried and tested TRSM code soon. Btw. I also gave a &lt;a href="http://www.informatik.uni-bremen.de/~malb/talks/20081010 - M4RI - Nancy.pdf"&gt;contributed talk about M4RI&lt;/a&gt; at Sage Days 10. My project for a train ride right after Sage Days 10 was to improve &lt;a href="http://trac.sagemath.org/sage_trac/ticket/4302"&gt;univariate polynomials&lt;/a&gt; over $\mathbb{F}_2$ in Sage to improve modular composition of polynomials.
&lt;/p&gt;
&lt;p&gt;
I&amp;#8217;m off to Santander on Wednesday for the &lt;a href="http://grupos.unican.es/amac/wmc-2008/"&gt;2nd Workshop on Mathematical Cryptology&lt;/a&gt; and once I&amp;#8217;m back I&amp;#8217;ll give a talk at the &lt;a href="https://www.srcf.ucam.org/cugms/node/726"&gt;Graduate Studies Elsewhere Open Afternoon&lt;/a&gt; in Cambridge on &amp;#8220;Algebraic Attacks against Block Ciphers&amp;#8221;.
&lt;/p&gt;
&lt;p&gt;One last thing: The DES generator is broken due to a bug in Sage, a &lt;a href="http://trac.sagemath.org/sage_trac/ticket/4324"&gt;fix&lt;/a&gt; is available on Trac.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt;fixed a bug in the F5/Matrix code and removed a nonsense statement about the rank of the matrices.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/GkUXkuWtAIo" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/10/20#sage-days-10</feedburner:origLink></item>
  <item>
    <title>Equation System Generator for DES</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/0_K2SdNrSfU/18</link>
    <description>I&amp;#8217;ve uploaded an &lt;a href="http://informatik.uni-bremen.de/~malb/binary/des.py"&gt;equation system generator&lt;/a&gt; for the &amp;#8220;Data Encryption Standard&amp;#8221; (DES) hoping to spare others the tedious work of writing one. As far as I know only equation systems but no flexible generators are floating around the net. I implemented three S-Box representations (following Courtois&amp;#8217; and Bard&amp;#8217;s paper &lt;a href="http://eprint.iacr.org/2006/402"&gt;Algebraic Cryptanalysis of DES&lt;/a&gt;): fully cubic equations, quadratic equations with added variables (Matthew Kwan&amp;#8217;s bitslice representation) and the former with pre-computed Gr&amp;ouml;bner bases.
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# loading the file&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attach&lt;/span&gt; &lt;span class="n"&gt;des&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;

&lt;span class="c"&gt;# two rounds only, see DES? for help on the constructor&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;des&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DES&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Nr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# default S-Box representation is opns_gb&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;des&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;polynomial_system&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;Pre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;computing&lt;/span&gt; &lt;span class="n"&gt;Groebner&lt;/span&gt; &lt;span class="n"&gt;bases&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Boxes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;might&lt;/span&gt; &lt;span class="kp"&gt;take&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;moment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;gb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;groebner_basis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;CPU&lt;/span&gt; &lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="mf"&gt;15.39&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.03&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;15.42&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
&lt;span class="n"&gt;Wall&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;15.78&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;

&lt;span class="c"&gt;# verify correctness&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gb&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k54&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k52&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k51&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k50&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k49&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k48&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k47&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k46&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k45&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k44&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k41&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;des&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;55&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;sage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;des&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;51&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
Let me know if you run into any trouble.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/0_K2SdNrSfU" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/09/18#des-equations</feedburner:origLink></item>
  <item>
    <title>Upcoming Workshops</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/izqN9Yid7pY/18</link>
    <description>I&amp;#8217;m going to attend &lt;a href="http://wiki.sagemath.org/days10/"&gt;Sage Days 10&lt;/a&gt; in Nancy, France (October 10-15, 2008). At SD10 I&amp;#8217;ll give a contributed talk about matrix multiplication over $\mathbb{F}_2$, i.e. the &lt;a href="http://m4ri.sagemath.org"&gt;M4RI&lt;/a&gt; library. I&amp;#8217;m also going to attend the &lt;a href="http://grupos.unican.es/amac/wmc-2008/"&gt;Second Workshop on Mathematical Cryptology&lt;/a&gt; in Santander, Spain (October 23-25, 2008).&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/izqN9Yid7pY" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/09/18#travel-plans-autumn-2008</feedburner:origLink></item>
  <item>
    <title>New Papers on eCrypt</title>
    <link>http://feedproxy.google.com/~r/malbblog/~3/zvmJZYTQ6eY/16</link>
    <description>Ann Hibner Koblitz (Women and Gender Studies Program, Arizona State University), Neal Koblitz (Dept. of Mathematics, Univ. of Washington), and Afred Menezes (Dept. of Combinatorics &amp;amp; Optimization, Univ. of Waterloo) published an interesting history of elliptic curve cryptography (ECC) titled: &lt;a href="http://eprint.iacr.org/2008/390"&gt;Elliptic Curve Cryptography: The Serpentine Course of a Paradigm Shift&lt;/a&gt;. They briefly introduce the math but the main part is their presentation and discussion how ECC became widely accepted (which apparently is not just because researchers agreed on a scientific basis). I only skimmed it, but it seems certainly worth a read. Speaking of Neal Koblitz and Alfred Menezis: Here are their papers on &amp;#8220;provable security&amp;#8221; which caused a fair amount of controversy: &lt;a href="http://eprint.iacr.org/2004/152"&gt;Another Look at &amp;#8220;Provable Security&amp;#8221;&lt;/a&gt; and &lt;a href="http://eprint.iacr.org/2006/229"&gt;Another Look at &amp;#8220;Provable Security&amp;#8221; II&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Itai Dinur and Adi Shamir put a pre-print of their much &lt;a href="http://www.schneier.com/blog/archives/2008/08/adi_shamirs_cub.html"&gt;hyped and discussed&lt;/a&gt; paper &lt;a href="http://eprint.iacr.org/2008/385"&gt;Cube Attacks on Tweakable Black Box Polynomials&lt;/a&gt; on ePrint. See also David Wagner&amp;#8217;s &lt;a href="http://groups.google.com/group/sci.crypt/msg/7065f9a4289581f1"&gt;summary&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/malbblog/~4/zvmJZYTQ6eY" height="1" width="1"/&gt;</description>
  <feedburner:origLink>http://www.informatik.uni-bremen.de/cgi-bin/cgiwrap/malb/blosxom.pl/2008/09/16#eprint-2008-09</feedburner:origLink></item>
  </channel>
</rss>
