Hints and tips ============== Assignment 1 (1.5h): test values: with password = "Secret", salt = "FAECTOR", iteration count = 1000: key = 296e31d58dcc33af8b2c57b5d10d14e5 with password = "secret", salt = "FAECTOR", iteration count = 1000: key = 52b8c6c9357187c8ed858ac223119604 This is not the easiest exercise, it requires some fiddling with bits and bytes, but you should be able to do it. Remember System.arraycopy. Assignment 2 (1h): Should be easy after Assignment 1. Assignment 3 (2h): A more difficult exercise, you have to find out how to go through all possible passwords, and you have to find out how to test for a valid decryption. Hint: do not take passwords longer than 4 characters; dealing with 4 characters already took my program a considerable time. Assignment 4 (3h): Also a more advanced exercise. To get a feeling for Floyd's cycle algorithm you better try Assignment 15. Assignment 5 (0.5h): Should not be difficult. Assignment 6 (1h): This is a must-do assignment, indispensable for many other assignments. In the workshop notes I gave hints for how to deal with tag-value pairs. Assignment 7 (0.5h): This should not be difficult if you have done Assignment 2. From the picture with assignment paths you may get the impression that you need this assignment for Assignments 9 and 10, but that is not necessarily the case.You can do 9 and 10 without having done 7, and then maybe, if you want, add things later. Assignment 8 (1h): Essential assignment for doing RSA. First do a version without PKCS#1v1.5, and if you have that working, add the PKCS1v1.5 stuff. With hindsight I should not have called it "RSA raw" in the picture, as "raw RSA" usually refers to *without* PKCS#1v1.5. Assignment 9 (0.5h): Central to asymmetric encryption. Here it all comes together. The ultimate test for your program is to exchanche encrypted messages with other groups. Assignment 10 (1h): Similar to Assignment 9, but now for digital signatures. The ultimate test for your program is to exchanche signed messages with other groups. Assignment 11 (1h): Not essential, just a fun assignment on the side. Assignment 12 (1h): A good exercise to do, you will make changes to your programns of assignments 6 and 8, that will speed up decryption considerably. Assignment 13 (1h): Only if you have done Assignment 3 and want to apply this to private keys. Not essential, also not difficult. Assignment 14 (1.5h): A nice assignment if you want to see a different way of asymmetric cryptography in action. Not essential, but funny, useful, and not difficult. Assignment 15 (1h): A nice challenge. You only build on Assignment 6, and even that is somewhat exaggerated. Assignment 16 (1.5h): Also a nice exercise to try. Should be doable. Assignment 17 (3h), 18 (1h): These are challenges for the mathematical nerds. Build on not more than Assignment 6 (and 18 builds on 16), but needs some more math to understand first (all explained in the notes), and also some work to program it all. Assignment 18 is my favourite one as the idea behind it was publiched in my first cryptanalytic publication. Assignment 19 (1h): Not too difficult and some fun. Assignment 20 (1h): Also not too difficult (you need to understand CRT though, so builds on Assignment 12); but a lot of fun when you succeed.