Re: [sage-devel] Extend crypto module

2017-05-11 Thread Johan S . H . Rosenkilde
Hi Friedrich

I totally agree with 1) and 2): that kind of implementations would be
very appropriate and valuable to have in Sage. Concerning 3), I would
initially think that doc-tests could be sufficient.

I was loosely involved in some discussions on implementing the McEliece
public-key crypto-system #21352
(https://trac.sagemath.org/ticket/21352) which has since stalled since
the author left it. From there I remember that we noticed some
crufty-ness to the code in sage/crypto. For instance, though there is a
base-class Cipher, it doesn't have abstract methods for encrypting and
decrypting; as a result, it seems that different words has been used for
this all over (at least "enciphering", "encode", "encrypt"). The
existing PublicKeyCipher in sage/crypto/cipher.py is also sort of weird:
e.g. it inherits key() from Cipher, but in the only current
implementation - Blum-Goldwasser class - there is instead public_key()
and private_key(). Perhaps some cleanup and redesign is appropriate
here.

I really don't know about 4). If researchers and teachers find that
they can use a modular, high-level implementation of certain protocols,
then why not? But as with the ciphers themselves, the aim shouldn't be a
competitive, highly optimised implementation, I think, but rather
something that eases understanding and experimentation.

Best,
Johan



Friedrich Wiemer writes:

> Today I stumbled across https://trac.sagemath.org/ticket/11565 in where the 
> design of the crypto module is briefly discussed ...
>
> 1) While RSA might be not the best cipher to point out the following, this 
> certainly holds for block ciphers or other crypto primitives. During my 
> research work I often implement some cipher scheme in python from scratch, 
> because I want to tinker with it, maybe exchange some parts of it, etc. 
> Having these things in sage with a highly modularized design would really 
> ease this kind of work.
>
> 2) Having all the heavy mathematic stuff in sage, we can easily provide 
> implementations of, say, AES that are in fact their mathematical 
> descriptions. I think Rusydi H. Makarim already started working on this. In 
> my opinion, this has at least two advantages: First it is a great 
> educational tool for students to see, how this math "works in real" and 
> helps them in getting a better understanding whats actually going on. 
> Second it would allow to have a collection of reference implementations, 
> which (because of the above modularized approach) allow to easily generate 
> also intermediate test vectors. For me, this last point is really a big 
> plus, because often you only get "coarse-grained" testvectors from cipher 
> specifications like input/output of the whole encryption (sometimes also 
> intermediate results after a single round or so) - but I have never seen a 
> specification, which also provides intermediate results after the inner 
> parts of a round function or so. If you want to implement some optimized 
> version, you might be very happy, to have such test possibilities at hand.
>
> 3) So, from the end of point 2: It would also be nice, to have a lot of 
> test vectors for crypto schemes - maybe its already enough to have these in 
> the doctests, at least this would be a nice starting point.
>
> 4) This last point is somewhat of an abstraction above point 2, combined 
> with 1. Going a level up, to the crypto-protocol level, it would be quite 
> easy to implement protocols like TLS when all the basic crypto stuff is 
> readily available. I was told that there is no free TLS implementation in 
> python available, where you are actually able to exchange parts of the 
> protocol (this again might be interesting if you are doing research on such 
> a protocol). Regarding this point, I'm not sure if sage is the right place 
> to have such a protocol level implementation, because its main aim seem to 
> be a mathematical CAS.
>
> What are your opinions regarding this?

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.


[sage-devel] Extend crypto module

2017-05-10 Thread Friedrich Wiemer
Today I stumbled across https://trac.sagemath.org/ticket/11565 in where the 
design of the crypto module is briefly discussed and if there should be 
implementations of RSA and other stuff and if that could be helpful.
I thought a bit about this and discussed it with a friend and here are our 
ideas:

1) While RSA might be not the best cipher to point out the following, this 
certainly holds for block ciphers or other crypto primitives. During my 
research work I often implement some cipher scheme in python from scratch, 
because I want to tinker with it, maybe exchange some parts of it, etc. 
Having these things in sage with a highly modularized design would really 
ease this kind of work.

2) Having all the heavy mathematic stuff in sage, we can easily provide 
implementations of, say, AES that are in fact their mathematical 
descriptions. I think Rusydi H. Makarim already started working on this. In 
my opinion, this has at least two advantages: First it is a great 
educational tool for students to see, how this math "works in real" and 
helps them in getting a better understanding whats actually going on. 
Second it would allow to have a collection of reference implementations, 
which (because of the above modularized approach) allow to easily generate 
also intermediate test vectors. For me, this last point is really a big 
plus, because often you only get "coarse-grained" testvectors from cipher 
specifications like input/output of the whole encryption (sometimes also 
intermediate results after a single round or so) - but I have never seen a 
specification, which also provides intermediate results after the inner 
parts of a round function or so. If you want to implement some optimized 
version, you might be very happy, to have such test possibilities at hand.

3) So, from the end of point 2: It would also be nice, to have a lot of 
test vectors for crypto schemes - maybe its already enough to have these in 
the doctests, at least this would be a nice starting point.

4) This last point is somewhat of an abstraction above point 2, combined 
with 1. Going a level up, to the crypto-protocol level, it would be quite 
easy to implement protocols like TLS when all the basic crypto stuff is 
readily available. I was told that there is no free TLS implementation in 
python available, where you are actually able to exchange parts of the 
protocol (this again might be interesting if you are doing research on such 
a protocol). Regarding this point, I'm not sure if sage is the right place 
to have such a protocol level implementation, because its main aim seem to 
be a mathematical CAS.

What are your opinions regarding this?

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.