26 June 2010

I got my masters degree!

Two months after having my first defense and getting my bachelor degree in computer science, I am happy to announce I also got a master's degree in mathematics.

I now need to find a thesis subject in computer science, and besides that, I'm free for the summer!

05 June 2010

Rijndael S-box Sage implementation

It's no secret I like Python and Sage a lot. Today, I had the pleasure of working with Sage again: as a school assignment, I was required to show the calculations that prove that the value of the Rijndael S-box in row 2, column d, was indeed d8. While I am able to invert a polynome of this size by hand (let alone apply an affine transformation), I see no reason to do it, as a suitable tool is available.

So, here we go, the Rijndael S-box in Sage:

F.<y> = GF(2, name='y')[]
K.<x> = GF(2**8, name='x', modulus=y^8 + y^4 + y^3 + y + 1)

bin_digits = lambda h: [((int(str(h), 16))//(2^i)) % 2
for i in range(3, -1, -1)]
bin_poly = lambda n : sum([b * x^(3-i)
for i,b in enumerate(bin_digits(n))])

b1 = 2
b2 = 'd'

s = x^4 * bin_poly(b1) + bin_poly(b2)
p = (1/s).polynomial().coeffs()

b = [0]*(8 - len(p)) + p
c = [1,1,0,0,0,1,1,0]
d = [int((b[i] + b[(i + 4) % 8] + b[(i + 5) % 8] +
b[(i + 6) % 8] + b[(i + 7) % 8] + c[i]).n()) % 2
i in range(8)]

s1 = sum([d[i] * 2^(3-i) for i in range(4)])
s2 = sum([d[i+4] * 2^(3-i) for i in range(4)])

print hex(s1), hex(s2)

I admit: the above is code, not calculations, but I did the calculations in class and worked hard on the code. My main problem was the bit order. Nowhere in the original publication did it say to reverse the bytes. Adding all the reverses was a moment of desperation, and imagine my surprise when it worked. I wonder how much credit that solution will get me.

A great Friday night it was.

03 June 2010

Xen virtual machines are the creepiest thing ever

Among the things that have always creeped people out are all kinds of ghosts and zombies, for one simple reason: since they are already dead, you can't kill them.

Along that line, here's what creeps me out: Xen virtual machines.

See what Wiki says about them:

Administrators can "live migrate" Xen virtual machines between physical hosts across a LAN without loss of availability. During this procedure, the LAN iteratively copies the memory of the virtual machine to the destination without stopping its execution. The process requires a stoppage of around 60–300 ms to perform final synchronization before the virtual machine begins executing at its final destination, providing an illusion of seamless migration.

Imagine that. On a traditional machine, if it was doing something you did not want it to do, you would slam the keyboard. On a VM, you'd kill the monitor. Then you'd pull the host's plug. Something would work. But here, as you try to kill the guest, it floats through the air to another host. There's no stopping it. There's nothing you can do but watch it do its evil.

Next, the robots revolt against us and it's Battlestar Galactica all over again. Brrr.