Kristin Lauter – Microsoft Research

Research Manager, Cryptography group

Kristin Lauter is a Principal Researcher andResearch Manager fortheCryptography group at Microsoft Research. She directs the group's research activities in theoretical and applied cryptography and in the related math fields of number theory and algebraic geometry. Her personal research interests include algorithmic number theory, elliptic curve, pairing-based, and lattice-based cryptography, homomorphic encryption, and cloud security and privacy, including privacy for healthcare.

Lauteris currently serving as President of the Association for Women in Mathematics, and on the Council of the American Mathematical Society. She was selected to be a Fellow of the American Mathematical Society in 2014. She is on the Editorial Board forthe Journal of Mathematical Cryptology, Journal of Algebra and Its Applications, and International Journal of Information and Coding Theory. She was a co-founder of the Women In Numbers Network, a research collaboration community for women in number theory, and she serves on the Scientific Advisory Board for BIRS, the Banff International Research Station. Lauter is also an Affiliate Professor in the Department of Mathematics at the University of Washington.She received her BA, MS, and PhD, all in mathematics, from the University of Chicago, in 1990, 1991, and 1996, respectively. She was T.H. Hildebrandt Assistant Professor of Mathematics at the University of Michigan (1996-1999), and a Visiting Scholar at Max Planck Institut fur Mathematik in Bonn, Germany (1997), and at Institut de Mathematiques Luminy in France (1999). In 2008, Lauter, together with her coauthors, was awarded the Selfridge Prize in Computational Number Theory.

Originally posted here:
Kristin Lauter - Microsoft Research

Cryptography (Windows)

Purpose

Cryptography is the use of codes to convert data so that only a specific recipient will be able to read it, using a key.

Microsoft cryptographic technologies include CryptoAPI, Cryptographic Service Providers (CSP), CryptoAPI Tools, CAPICOM, WinTrust, issuing and managing certificates, and developing customizable public key infrastructures. Certificate and smart card enrollment, certificate management, and custom module development are also described.

CryptoAPI is intended for use by developers of Windows-based applications that will enable users to create and exchange documents and other data in a secure environment, especially over nonsecure media such as the Internet. Developers should be familiar with the C and C++ programming languages and the Windows programming environment. Although not required, an understanding of cryptography or security-related subjects is advised.

CAPICOM is a 32-bit only component that is intended for use by developers who are creating applications using Visual Basic Scripting Edition (VBScript) programming language or the C++ programming language. CAPICOM is available for use in the operating systems specified in Run-Time Requirements. For future development, we recommend that you use the .NET Framework to implement security features. For more information, see Alternatives to Using CAPICOM.

For information about run-time requirements for a particular programming element, see the Requirements section of the reference page for that element.

CAPICOM 2.1.0.2 is supported on the following operating systems and versions:

CAPICOM is available as a redistributable file that can be downloaded from Platform SDK Redistributable: CAPICOM.

Certificate Services requires the following versions of these operating systems:

About Cryptography

Key cryptography concepts and a high-level view of Microsoft cryptography technologies.

Using Cryptography

Cryptography processes, procedures, and extended samples of C and Visual Basic programs using CryptoAPI functions and CAPICOM objects.

Cryptography Reference

Detailed descriptions of the Microsoft cryptography functions, interfaces, objects, structures, and other programming elements. Includes reference descriptions of the API for working with digital certificates.

Read the original here:
Cryptography (Windows)

Cryptography – University of Washington

Cryptography

Hill-ciphers

an application of Linear Algebra

by: Paal Schiefloe

3 December 2001

[top]

This project for my Linear Algebra class is about cryptography. I will discuss a simple method of enciphering and deciphering a message using matrix transformations and modular arithmetic, and show how elementary row operations can sometimes be used to break an opponent's code.

The ciphers I will discuss are called Hill ciphers after Lester S. Hill who introduced them in two papers: "Cryptography in an Algebraic Alphabet," American Mathematical Monthly, 36, June-July 1929, pp. 306-312; and "Concerning Certain Linear Transformation Apparatus of Cryptography," American Mathematical Monthly, 38, March 1931, pp. 135-154.

I will show an example of how a message is enciphered and deciphered using Hill ciphers, I will also briefly discuss how to break a Hill cipher using elementary row operations by giving an example from "Elementary Linear Algebra, Applications version, edition 6".

[top]

Cryptography has for long been an important issue in the realm of computers. It was mainly used for the security needed for passwords but now cryptography is very important due to the Internet's flow of sensitive information such as credit card information and other sensitive information which is fairly easy to monitor by unintended third hand parties.

The idea behind enciphering a message is to make it worthless to everyone except for the party with the deciphering "key".

[top]

For Hill ciphers I assign numerical values to each plaintext and ciphertext letter so that A=1, B=2, C=2 and so on. If I wanted to I could have assigned numerical values for all the other characters on a keyboard, but for simplicity I will only assign numerical values to the letters in the alphabet in this project.

The following procedure shows the simplest Hill ciphers (Hill 2-cipher), successive pairs of plaintext that are transformed into ciphertext by a 2 x 2 matrix A.

NOTE: I will impose an additional condition on matrix A later. Here I have assigned numerical values to the alphabet:

Choose a 2 x 2 matrix A with integer entries to perform the encoding.

(The matrix has to be invertible modulo m, but I will discuss this later)

Group successive plaintext letters into pairs. If we end up with one single letter at the end, simply add an arbitrary "dummy" letter to fill out the last pair of letters.

Enciphering Step 3.

Convert each plaintext pair p1p2 into a column vector p.

Then form the plaintext matrix P of all our plaintext column vectors.

To encipher the message we multiply our plaintext matrix P by our transformation matrix A to form the product AP.

The product of our matrix multiplication is the ciphertext matrix C.

Enciphering Step 4.

Now we convert each ciphertext vector into its alphabetical equivalent and write out our enciphered message.

This was the encoding procedure, pretty simple, huh:) Let's see how we decipher our enciphered message.

Deciphering Step 1. Now we group the successive ciphertext letters into pairs and convert each ciphertext pair c1c2 into a column vector c. Then form the ciphertext matrix C of all our ciphertext column vectors.

Deciphering Step 2.

Multiply the ciphertext matrix C with the inverse of our enciphering matrix A to obtain the deciphered message. Not too difficult, huh:)

NOTE: To use this procedure we have to understand the concept of modular arithmetic. In the 6 steps I showed you above, I chose not to include the modular arithmetic in the steps for simplicity. However, modular arithmetic is important for this procedure to work. Keep reading and I'll show you why this is so important:)

[top]

We have the transformation matrix A

When we multiply this vector by our transformation matrix A, we get the enciphered column vector

Uh...hmmm, what letters correspond to the integers 148 and 64? This is where Modular Arithmetic comes in handy.

Our alphabet is given by non negative integers from 1, 2, , ..., m, where m is the length of our alphabet (in this case m = 26).

What we do when we have over 26, is simply "wrapping around" the numbers from 27 to 52 to represent the 26 letters again, then we do the same thing from 53 to 78 etc. We can do the same with negative integers (in this case Z=0, Y=-1, X=-2 etc.).

The procedure of "wrapping" is quite general. It is the same procedure we use every noon and midnight when we begin again to number the hours 1, 2, etc. In a 24 hour system, 18:00 is the same as 6:00 (pm) and 13:00 is 1:00 (pm).

How we do this mathematically is as follows: When we have integers greater than 26, we replace it by the remainder that results when this integer is divided by 26. So if we have the number 148 from the example above, we divide 148 by 26 and the remainder is 18.

148 - (5 * 26) = 18

Here are a couple examples for some different modulus:

7 = 2 (mod 5) because the remainder is 2 after dividing 7 by 5

19 = 3 (mod 2) because the remainder is 3 after dividing 19 by 2

-1 = 25 (mod 26) because the remainder is 25 after dividing -1 by 26

The formal definitions:

If m is a positive integer and a and b are any integers, then we say that a is equivalent to b modulo m, written

a = b (mod m)

if a-b is an integer multiple of m.

Now to the most important part of the concept of Modular Arithmetic for Hill ciphers. As mentioned in the procedure for enciphering and deciphering plaintext using a simple Hill-cipher above, we have to impose an additional condition for our transformation matrix A:

The transformation matrix A must be invertible modulo m for this procedure to work.

So when finding the inverse of our transformation matrix A we have to take (mod m) into consideration.

However, since this project is about Linear Algebra, I chose to skip the details about the modular arithmetic here, and provide a table of the reciprocols of modulo 26 instead. The inmportant thing is to keep in mind when checking our transformation matrix to see if it is invertile it ha to be invertible modulo m, you see how this is done in the example provided below the table of reciprocals modulo 26:.

[top]

Let's say we want to encipher the following sentence,"THE PROFESSOR IS EVIL", into ciphertext.

The first thing we do is to group the letters into pairs of 2 letters. If we would do a Hill 3-cipher, we would group the letters in groups of 3 letters and use a 3 x 3 transformation matrix, but in this example we're using a Hill 2-cipher.

For a Hill n-cipher, use n x n transformation matrix.

So, I have grouped the letters like this:

This leads us to step 3 of the procedure, convert each pair into a column to form the plaintext matrix P.

Oooops, most of these numbers in E are over 26, but by using the trick we learned from modular arithmetic we easily convert into nicer numbers, remember this is in modulo 26.

Then we assign letters to the numerical values by using our table and this is what we get:

RLQFXCHAAQAFCWAXMB

Yeah, we enciphered the message, let's hope the professor can't break it. I'll show you later how Hill-ciphers can be broken by using row reduction.

All right, time to decipher the messages.

Let's imagine we just received this message from one of our classmates, we know the matrix A he/she used to encipher the message with, so what do we do?

Now we work backwards, once again grouping the ciphertext into pairs of 2 letters and assigning numerical values for the letters. We make each pair into a column vector in a matrix E.

Then we simply multiply the matrix E by the inverse of A, but we have to remember our modular arithmetic from the example above.

"THE PROFESSOR IS EVIL"

Nice, we just deciphered the message.

[top]

If we are able to obtain a small amount of corresponding plaintext and ciphertext from a secret message, it is possible to determine the deciphering matrix A and then again decipher the entire message. We have learned in class that a linear transformation is determined by its values at a basis. This means that if we have a Hill n-cipher, and if

p1, p2, ... , pn

are linear independent plaintext vectors whose corresponding ciphertext vectors

Ap1, Ap2, ..., Apn

are known, then we have enough information to determine the matrix A and later A-1 (mod m).

To illustrate this I found an example from "Elementary Linear Algebra, Applications version, edition 6".

Let's say that we obtain an enciphered message and we are able to deduce that it is a letter starting with "DEAR". With a small amount of such data it may be possible to determine the deciphering matrix of a Hill-cipher and consequently get access to the rest of the message.

...Bibliography/References... [top]

Howard Anton and Christ Rorres. Elementary Linear Algebra Application Version. 6th edition. John Wiley & Sons, INC.

Eisenberg, Murray. Hill Ciphers and Modular Linear Algebra. 3 Nov 1999 (accessed 26 November - 2 December 2001) <http://www.math.umass.edu/~murray/Hillciph.pdf>

Goulet, John. Project #6 Cryptography. (accessed 26 November - 2 December 2001) <http://www.prenhall.com/divisions/esm/app/ph-linear/kolman/html/proj6.html>

More:
Cryptography - University of Washington

Braingle: Codes, Ciphers, Encryption and Cryptography

Codes, Ciphers, Encryption and Cryptography

Cryptography is the discipline of using codes and ciphers to encrypt a message and make it unreadable unless the recipient knows the secret to decrypt it. Encryption has been used for many thousands of years. The following codes and ciphers can be learned and used to encrypt and decrypt messages by hand.

You can now get these codes and ciphers on your iPhone or iPad and send secret messages from anywhere.

Monoalphabetic Ciphers

A monoalphabetic cipher uses the same substitution across the entire message. For example, if you know that the letter A is enciphered as the letter K, this will hold true for the entire message. These types of messages can be cracked by using frequency analysis, educated guesses or trial and error.

In a polyalphabetic cipher, the substitution may change throughout the message. In other words, the letter A may be encoded as the letter K for part of the message, but later on it might be encoded as the letter W.

Instead of substituting one letter for another letter, a polygraphic cipher performs substitutions with two or more groups of letters. This has the advantage of masking the frequency distribution of letters, which makes frequency analysis attackes much more difficult.

Unlike substitution ciphers that replace letters with other letters, a transposition cipher keeps the letters the same, but rearranges their order according to a specific algorithm.

Read more:
Braingle: Codes, Ciphers, Encryption and Cryptography

Introduction to Modern Cryptography, Second Edition …

Review

Praise for the First Edition:

"This book is a comprehensive, rigorous introduction to what the authors name modern cryptography. a novel approach to how cryptography is taught, replacing the older, construction-based approach. The concepts are clearly stated, both in an intuitive fashion and formally. I would heartily recommend this book to anyone who is interested in cryptography. The exercises are challenging and interesting, and can benefit readers of all academic levels." IACR Book Reviews, January 2010

"Over the past 30 years, cryptography has been transformed from a mysterious art into a mathematically rigorous science. The textbook by Jonathan Katz and Yehuda Lindell finally makes this modern approach to cryptography accessible to a broad audience. Readers of this text will learn how to think precisely about the security of protocols against arbitrary attacks, a skill that will remain relevant and useful regardless of how technology and cryptography standards change. The book uses just enough formalism to maintain precision and rigor without obscuring the development of ideas. It manages to convey both the theory's conceptual beauty and its relevance to practice. I plan to use it every time I teach an undergraduate course in cryptography." Salil Vadhan, Harvard University, Cambridge, Massachusetts, USA

"The greatest attribute is the fact that the material is presented in such a unified way. This is not just a collection of topics from cryptography thrown together at random. One topic leads effortlessly to the next. As such, this is a virtually indispensable resource for modern cryptography." Donald L. Vestal, South Dakota State University, Brookings, USA, from MAA Online, July 2008

" an excellent introduction to the theoretical background of cryptography. It would be a fine textbook for an advanced undergraduate (or graduate) course in theoretical computer science for students who have already seen the rudiments of cryptography. It will be a valuable reference for researchers in the field." Steven D. Galbraith, Mathematical Reviews, 2009

"The book is highly recommended as a textbook in cryptography courses at graduate or advanced undergraduate levels. covers, in a splendid way, the main notions of current cryptography from the point of view of information-theoretical security. This corresponds indeed to a modern cryptography approach." Guillermo Morales-Luna, Zentralblatt MATH, Vol. 1143

Jonathan Katz is a professor of computer science at the University of Maryland, and director of the Maryland Cybersecurity Center. He has published over 100 articles on cryptography, and serves as an editor of the Journal of Cryptology, the premier journal of the field. Prof. Katz has been invited to give introductory lectures on cryptography for audiences in academia, industry, and government, as well as an on-line cryptography course through Coursera.

Yehuda Lindell is a professor of computer science at Bar-Ilan University. He has published more than 90 articles on cryptography and four books, and has considerable industry experience in deploying cryptographic schemes. Professor Lindell lectures widely in both academic and industry venues on both theoretical and applied cryptography, and has been recognized with two prestigious grants from the European Research Council.

Read the rest here:
Introduction to Modern Cryptography, Second Edition ...

Using Cryptography to Store Credentials Safely | Android …

Posted by Trevor Johns, Android Developer Relations team

Following our talk "Security and Privacy in Android Apps" at Google I/O last year, many people had specific questions about how to use cryptography in Android. Many of those revolved around which APIs to use for a specific purpose. Let's look at how to use cryptography to safely store user credentials, such as passwords and auth tokens, on local storage.

A common (but incorrect) pattern that we've recently become aware of is to use SecureRandom as a means of generating deterministic key material, which would then be used to encrypt local credential caches. Examples are not hard to find, such as here, here, here, and elsewhere.

In this pattern, rather than storing an encryption key directly as a string inside an APK, the code uses a proxy string to generate the key instead similar to a passphrase. This essentially obfuscates the key so that it's not readily visible to attackers. However, a skilled attacker would be able to easily see around this strategy. We don't recommend it.

The fact is, Android's existing security model already provides plenty of protection for this kind of data. User credentials should be stored with the MODE_PRIVATE flag set and stored in internal storage, rather than on an SD card, since permissions aren't enforced on external storage. Combined with device encryption, this provides protection from most types of attacks targeting credentials.

However, there's another problem with using SecureRandom in the way described above. Starting with Android 4.2, the default SecureRandom provider is OpenSSL, and a developer can no longer override SecureRandoms internal state. Consider the following code:

The old Bouncy Castle-based implementation allowed overriding the internally generated, /dev/urandom based key for each SecureRandom instance. Developers which attempted to explicitly seed the random number generator would find that their seed replaces, not supplements, the existing seed (contrary to the reference implementations documentation). Under OpenSSL, this error-prone behavior is no longer possible.

Unfortunately, applications who relied on the old behavior will find that the output from SecureRandom changes randomly every time their application starts up. (This is actually a very desirable trait for a random number generator!) Attempting to obfuscate encryption keys in this manner will no longer work.

A more reasonable approach is simply to generate a truly random AES key when an application is first launched:

Note that the security of this approach relies on safeguarding the generated key, which is is predicated on the security of the internal storage. Leaving the target file unencrypted (but set to MODE_PRIVATE) would provide similar security.

See the rest here:
Using Cryptography to Store Credentials Safely | Android ...

This open-source personal crypto-key vault wants two things: To make the web safer … and your donations

An open-source hardware project aimed at making the internet "a little bit safer" needs an influx of cash to continue its work.

The Cryptech effort was created following revelations from NSA whistleblower Edward Snowden that the US government and its pals are exploiting standards and weak crypto algorithms to gain access to citizens' private correspondence and documents.

In response, a group of engineers decided there needed to be an open-source hardware engine that could provide strong and reliable encryption and decryption for email, plus public-private key cryptography for all sorts of things from digitally signing messages and files to DNSSEC.

"Recent revelations have called into question the integrity of some of the implementations of basic cryptographic functions and devices used to secure communications on the Internet," the team wrote earlier this year.

"There are serious questions about algorithms and about implementations of those algorithms in software and particularly hardware.

"The algorithmic issues are in the domain of the heavy math cryptography folk. But we must also deal with the implementation issues. We therefore are embarking on development of an open-source hardware cryptographic engine that meets the needs of high-assurance internet infrastructure systems that use cryptography.

"The open-source hardware cryptographic engine must be of general use to the broad internet community, covering needs such as secure email, web, DNS, PKIs, etc."

Cryptech's goal is to develop an inexpensive ARM-powered Hardware Security Module (HSM) that can store cryptokeys and act as a signing engine to establish the authenticity of digital content.

The idea is you store a secret key in the module, which is designed to never intentionally (and, ideally, never accidentally) disclose that key. Rather, you tell the module to, for example, sign some data using that secret key; people can use your public key and that signature to verify that particular data really came from you, and has not been tampered with in transit.

The Cryptech HSM will use USB to communicate with your computer. To avoid attacks on the USB controller spreading to the HSM's CPU, the USB connection is terminated at the on-board single-purpose controller chip, which sends commands and data and receives a reply from the CPU over a serial bus. This means if you're able to compromise the USB chip, you can't directly access the main processor's memory to extract the secret keys.

Read more:
This open-source personal crypto-key vault wants two things: To make the web safer ... and your donations