Computer Algebra (Ma 810a - Cs 810a)
Tuesdays and Thursdays from 05:00PM to 06:15PM,
Babbio Center, Room 221
Course Description:
- The course is designed for advanced undergraduate, graduate students in
computer science and mathematics. It introduces basic topics and methods
in computer algebra with emphasis on applications to cryptography.
Topics include: fundamental algorithms for integers and polynomials,
Euclidean algorithm, Chinese Remainder, Fast Fourier Transform,
polynomial factorization and root finding, lattice basis reduction,
primality testing, integer factorization, introduction to polynomial
ideals and Gröbner basis. Programming skills are required as
students are expected to complete a number of programming projects.
Pre-requisites:
- Programming skills in C/C++. Matlab or Mathematica is a plus.
Textbooks:
Homework:
You can either send the homework by email or hand it in before class on
thursday.
- Assignment 1
(due by Thursday, September 11, 2008)
- Assignment 2,
programming template
(due by Thursday, September 25, 2008)
- Assignment 3
(due by Thursday, October 2, 2008)
- Assignment 4
(due by Thursday, October 9, 2008)
- Assignment 5,
example for root finding
algorithm in Mathematica
(due by Thursday, November 6, 2008)
Projects:
Tools:
Here are links to useful tools.
- lc (for linux) (documentation)
lc is an introductory tool for the usage of LiDIA. LiDIA is a C++
library for computational number theory.
You need to unpack the .tar.gz file and run the configure script in the
lc directory.
The following shows a typical lc session:
\\ LC - LiDIA's C Interpreter - version 1.3.0
\\ Compiled on 10 Nov 1997 (20:52) for i586-unknown-linux
//\\ Copyright (c) 1994, 1995, 1996, 1997 by the LiDIA Group
// \\_ Type help(); to start the online help system.
L i D I A Type C-d or quit(); to exit.
lc> a = randomize(2^128);
$0 = 15136621630561960916288152841186910761
lc> a % 2^64;
$1 = 3273999759283003945
lc> b = randomize(2^256);
$2 =
13421883499634334105436795647208428599462426641921948818558951376056961640996
lc> (b >> 128) % 2^64;
$3 = 5138720234892705243
lc> a*b;
$4 =
203161972103447732660768651514865602011538437680133525773931595412288161409341440296702552712077823349302371157956
lc> c = randomize(2^256);
$5 =
113405229033774872475667353786895200303917407576868234785357240007576627596170
lc> $4 % c;
$6 =
99010597457573768318599220361586320216516024628461227796661928077768504598776
lc> $4 / c;
$7 =
14511569435960552332912046536776114429395602691438108983852256815163440100667245735478753765148415953521597939854/8100373502412490891119096699063942878851243398347731056096945714826901971155
lc> floor($4 / c);
$8 = 1791469175049601017333860166330679854
lc> $4 - ($8 * c + $6);
$9 = 0
lc>
- Valgrind is a framework for building
dynamic analysis tools.
Slides:
Instructors:
- Dr. Alex Myasnikov,
Office hours: By appointment. Kiddie 351
- Dr. Werner Backes,
Office hours: By appointment. Babbio 640b
Grading:
- Homework Assignments: 15%
- Projects: 60% (15% + 15% + 30%)
- Final: 25%
Policies:
- A make-up midterm/final will be granted only if the instructor is
notified before the exam and there is serious illness or similarly
important reason for missing the exam.
- For fairness to all students there will be no individual extra
credit work.
- It is cheating to collaboratively work out a detailed solution, to
copy a solution from another student or some other resource without
specifying it, or to give away a solution.
- ALL parties involved in a case of cheating get an automatic grade of
zero (0) in the assignment/exam. Repeated cases get an F in the
course. Any case of cheating will be reported to the honor board.
- Projects should be completed in C/C++ (unless otherwise stated).
Projects and other programming assignments are graded on style,
documentation, and content. Your code must compile on the lab
machines. Programs that do not compile will receive an automatic
grade of zero (0).
- Any complaint regarding a grade must be presented no later than one
week following the return of the relevant exam or assignment.
Syllabus:
The course is tentatively divided into three sections: basic operations
with polynomials and integers, integer and polynomial factorization,
and public key cryptography. At the end of each section students are required
to complete a programming project.
(updated 11/19/2008)
- Introduction.
- Algorithmic complexity. O() notation.
- Groups, Rings, Fields.
- Polynomials.
- Fundamental Algorithms.
- Representation and addition of numbers and polynomials
- Multiplication
- Division with remainder
- The Euclidean Algorithm
- Euclidean Domains.
- The Extended Euclidean Algorithm
- Cost analysis for Z and F[x]
- Uniqueness of the gcd. Normal forms.
- Modular operations
- Modular Arithmetic
- Modular Inverses via Euclid
- Repeated squaring
- Modular Inverses via Fermat
- Linear Diophantine equations
- Continued fractions and Diophantine approximation
- Modular algorithms
- Evaluation and interpolation
- The Chinese Remainder Algorithm
- Modular determinant computation
- Fast multiplication
- Karatsuba's multiplication algorithm
- Fast Fourier Transform
- Newton iteration
- Factoring polynomials
- Distinct-degree factorization
- Equal-degree factorization
- A complete factoring algorithm
- Root finding
- Factoring integers
- Pollard and Strassen method
- Pollard's rho method
- Dixon's random squares method
- Short vectors in lattices
- Lattices
- Lattice basis reduction
- Applications
- Coppersmith's method
- Primality testing
- Fermat's test
- Strong tests.
- Finding primes
- Public Key cryptography
- Introduction
- RSA
- Diffie-Hellman key exchange
- ElGamal
- Rabin's
- Knapsack-based crypto systems
Last updated on December 10, 2008.