Team
Programming Projects
Term
Project ideas (you are encouraged to propose your own team projects, and
discuss with me the feasibility of your projects.):
1) Modeling/Simulation/Verification/Synthesis/Implementation
of some network security systems
2) Something related to
your own research. You implement the protocols you designed and then evaluate
the performances of your protocols in real systems or testbeds.
3) Real network security
systems, such as security protocols for CPS
Term Project grading: In particular, the following four aspects of a term project
were considered in project grading:
1)
Project has a clear goal
2)
Goal has a clear value if achieved
3)
There are novel ideas involved in achieving the goal
4)
These ideas and your implementation work
In summary, the
project grade is based on answers to these questions: Clear goal? Has value?
New ideas? Ideas work?
If you would like to
get detailed written feedback on your project report please let me know and I
will give you a marked hard copy. If you disagree with my assessment of any of
the above regarding your project, please see me. I would be happy to discuss
the final project grade with you and fix it if appropriate.
List of potential team projects (if you
cannot choose your own project)
For this
semester, students can propose their own projects (then you need to discuss
with the instructor about the feasibility of your proposed project). A rule of
thumb here is that we expect that you successfully implement your project and
this project can lead to a publication of academic research papers in some
academic conferences.
Or you can
choose to do TWO of the
following programming assignments.
Programming assignment 1:
In this exercise you will build a simple cryptography program in a
programming language of your choice. Then you will generate a few ciphertexts.
Finally you will try to cryptanalyze another groups ciphertexts.
|
For
simplicity, we assume that the input alphabet is {a-z, A-Z, 0-9} plus a
special empty space character. Your program shall perform the following
functions: |
||
|
1 |
From a
plaintext produce an alphabetic substitution cipher. In other words, your key
is a substitution rule for each possible input character. |
|
|
2 |
From a plaintext
produce a transposition cipher. For uniform encryption by all students, we
assume that the cipher will work on a block of 8 characters. In other words,
you always permute within a block of 8 characters. |
|
|
3 |
From a
plaintext produce a product cipher based on the previous functions. For
simplicity, assume that the substitution cipher is used first and then the
transposition cipher is used to encrypt the result to get the final
ciphertext. |
|
|
Generate one
cipher-method with each of the three functions (three cithers in total). For
each cipher method (with a fixed key) you encrypt some arbitrary plain-text
that contains the words "computer" and "security" inside
the plaintext. Each text should contain at least 1000 characters and be of
normal type (i.e. not medical). |
||
|
After you
produced the ciphertexts using each of the 3 encryption methods (with
different keys), you now start to design methods to find the original
plaintext using the given ciphertext. Begin with the simplest (1) and
continue with (2) and (3). |
||
|
1 |
Build your
own tools or use ready-made tools or scripts to cryptanalyze the ciphers. |
|
|
2 |
Try to get
the plaintext from the ciphertexts. |
|
|
3 |
Try to get
the key or alphabet used. |
|
What you have to submit
Programming assignment 2:
In this exercise, you will
have to implement RSA encryption. You cannot use existing RSA implementations
found from web or in JAVA. What you can use are
2. For C++ you can use a library such as NTL (Library for doing Number Theory) or GMP (the GNU Multiple Precision Arithmetic
Library).
In other words, you can use these big-integer implementation to
manage your data and do module operation, but not use the existing implemented methods
(gcd, power, finding prime numbers, and so on). You have to implement these
functions yourself. You can use existing secure function to produce large
random numbers (some functions provided for random numbers cannot be used due
to its weak security). Noticethat JAVA provide tools to get random numbers in
java.util.random or java.security.SecureRandom
Similarly, C++ have rand()
and srand() to generate random numbers. You can
use the random number function provided by Java if implementing random numbers
is really difficult for you. However, these methods there are not secure since Linear
congruent method is the default method set for Java's two built in random
number generators. So to enhance security, you are strongly recommended to
implement your own good random number generator.
In your own RSA
implementation, assume that the large prime numbers are at least 500 bits (but
could be much larger than this). You should write several functions
yourself
What you have to submit
Programming assignment 3:
In this exercise, you will
have to implement ElGamal digital signature method. You cannot use existing
implementations found from web or in JAVA. What you can use are
4. For C++ you can use a library such as NTL (Library for doing Number Theory) or GMP (the GNU Multiple Precision Arithmetic
Library).
In other words, you can use these big-integer implementation to
manage your data and do module operation, but not use the existing implemented methods
(gcd, power, finding prime numbers, and so on). You have to implement these
functions yourself. You can use existing secure function to produce large
random numbers (some functions provided for random numbers cannot be used due
to its weak security). Noticethat JAVA provide tools to get random numbers in
java.util.random or java.security.SecureRandom
Similarly, C++ have rand()
and srand() to generate random numbers. You can
use the random number function provided by Java if implementing random numbers
is really difficult for you. However, these methods there are not secure since Linear
congruent method is the default method set for Java's two built in random
number generators. So to enhance security, you are strongly recommended to
implement your own good random number generator.
In your own ElGamal
implementation, assume that the large prime numbers are at least 500 bits (but
could be much larger than this). You should write several functions
yourself
What you have to submit