crypto-documentation_main

advertisement
1. INTRODUCTION
1.1 A Brief Introduction to Cryptography:
Cryptography is the science of using mathematics to encrypt and decrypt
data. Cryptography enables you to store sensitive information or transmit it across
insecure networks (like the Internet) so that it cannot be read by anyone except the
intended recipient.
Cryptography might be summed up as the study of techniques and
applications that depend on the existence of difficult problems. Cryptology (from
the Greek kryptós lógos, meaning ``hidden word’’) is the discipline of
cryptography and cryptanalysis combined. To most people, cryptography is
concerned with keeping communications private. Indeed, the protection of
sensitive communications has been the emphasis of cryptography throughout much
of its history. However, this is only one part of today’s cryptography.
As we move into an information society, the technological means for global
surveillance of millions of individual people are becoming available to major
governments. Cryptography has become one of the main tools for privacy, trust,
access control, electronic payments, corporate security, and countless other fields.
Cryptography is no longer a military thing that should not be messed with.
Encryption is the transformation of data into a form that is as close to
impossible as possible to read without the appropriate knowledge (a key). Its
purpose is to ensure privacy by keeping information hidden from anyone for whom
it is not intended, even those who have access to the encrypted data.
Decryption is the reverse of encryption; it is the transformation of encrypted
data back into an intelligible form.
1
Encryption and decryption generally require the use of some secret
information, referred to as a key. For some encryption mechanisms, the same key
is used for both encryption and decryption; for other mechanisms, the keys used
for encryption and decryption is different.
Today’s
cryptography
is
more
than
encryption
and
decryption.
Authentication is as fundamentally a part of our lives as privacy. We use
authentication throughout our everyday lives – when we sign our name to some
document for instance – and, as we move to a world where our decisions and
agreements are communicated electronically, we need to have electronic
techniques for providing authentication.
Cryptography provides mechanisms for such procedures. A digital signature
binds a document to the possessor of a particular key, while a digital timestamp
binds a document to its creation at a particular time. These cryptographic
mechanisms can be used to control access to a shared disk drive, a high security
installation, or a pay-per-view TV channel.
The field of cryptography encompasses other uses as well. With just a few
basic cryptographic tools, it is possible to build elaborate schemes and protocols
that allow us to pay using electronic money, to prove we know certain information
without revealing the information itself, and to share a secret quantity in such a
way that a subset of the shares can reconstruct the secret.
While modern cryptography is growing increasingly diverse, cryptography
is fundamentally based on problems that are difficult to solve. A problem may be
difficult because its solution requires some secret knowledge, such as decrypting
an encrypted message or signing some digital document. The problem may also be
hard because it is intrinsically difficult to complete, such as finding a message that
produces a given hash value.
2
1.2 History of cryptography and Data Encryption:
The origin of cryptography probably goes back to the very beginning of
human existence, as people tried to learn how to communicate. They consequently
had to find means to guarantee secrecy as part of their communications. However,
the first deliberate use of technical methods to encipher messages may be
attributed to the ancient Greeks, around 6 years BC: a stick, named “scytale” was
used. The sender would roll a strip of paper around the stick and write his message
longitudinally on it. Then, he’d unfold the paper and send it over to the addressee.
Decrypting the message without knowledge of the stick’s width – acting here as a
secret key – was meant to be impossible. Later, Roman armies used Caesar’s
cipher code to communicate (a three-letter alphabet shift).
The next 19 centuries have been devoted to creating more or less
clever experimental encipher techniques, whose security actually relied on how
much trust user would grant them. During the 19th century, Kerchoffs wrote the
principles of modern cryptography. One of those principles stated that security of a
cryptographic system did not rely on the cryptographic process itself but on the
key that was used.
So, from that point, cryptographic systems were expected to meet those
requirements. However, existing systems still lacked mathematical background,
and therefore tools to measure or benchmark their resistance to attacks. Even better
if somebody could finally reach cryptography’s ultimate goal and find a 100%
unconditionally safe system! In 1948 and 1949, scientific background was added
to cryptography with 2 papers of Claude Shannon: “A Mathematical Theory of
Communication” and mainly “The Communication Theory of Secrecy Systems”.
Those articles swept away hopes and prejudices. Shannon proved Vernam’s cipher
that had been proposed a few years before – and also named One Time Pad – was
the only unconditionally safe system that could ever exist. Unfortunately, that
system was unusable in practice… This is the reason why, nowadays, evaluation of
3
security systems is based on computational security instead. One claims a secret
key cipher is safe if no known attack’s complexity is any better than a full search
on all possible keys.
1.3 Importance of cryptography in Modern World:
Cryptography allows people to carry over the confidence found in the
physical world to the electronic world, thus allowing people to do business
electronically without worries of deceit and deception. Every day hundreds of
thousands of people interact electronically, whether it is through e-mail, ecommerce (business conducted over the Internet), ATM machines, or cellular
phones. The perpetual increase of information transmitted electronically has lead
to an increased reliance on cryptography.
Cryptography on the Internet: The Internet, comprised of millions of
interconnected computers, allows nearly instantaneous communication and transfer
of information, around the world. People use e-mail to correspond with one
another. The World Wide Web is used for online business, data distribution,
marketing, research, learning, and a myriad of other activities.
Cryptography makes secure web sites and electronic safe transmissions
possible. For a web site to be secure all of the data transmitted between the
computers where the data is kept and where it is received must be encrypted. This
allows people to do online banking, online trading, and make online purchases
with their credit cards, without worrying that any of their account information is
being compromised. Cryptography is very important to the continued growth of
the Internet and electronic commerce.
4
E-mail: It is transmitted in plain text over unknown pathways and resides
for various periods of time on computer files over which you have no control.
Whether you’re planning a political campaign, discussing your finances, having an
affair, completing a business deal, or engaging in some totally innocuous activity,
your messages have less privacy than if you sent all of your written
correspondence on postcards.
The nature of the Internet and the electronic medium allows effective
scanning of message contents using sophisticated filtering software. Electronic
mail is gradually replacing conventional paper mail and messages can be easily
and automatically intercepted and scanned for interesting keywords.
Another problem with e-mail is that it is very easy to forge the identity of
the sender. The solution to these problems is to use cryptography. However, there
are restrictions on the export and use of strong cryptography, particularly in the
USA, but now gaining momentum in other countries. Furthermore, some
governments, and again the USA is the most prominent, want decryption keys
lodged with escrow agents, so that law enforcement agencies can, with appropriate
authorization, intercept and decrypt private messages. It is often claimed that this
facility is no different from powers that the government has always possessed to
wiretap telephones. There is however, a vital difference. Citizens are now being
asked to take action to make themselves available for surveillance.
Cryptography today involves more than encryption and decryption of
messages. It also provides mechanisms for authenticating documents using a
digital signature, which binds a document to the possessor of a particular key,
while a digital timestamp binds a document to its creation at a particular time.
These are important functions, which must take the place of equivalent manual
authentication procedures as we move into the digital age. Cryptography also plays
an important part in the developing field of digital cash and electronic funds
transfer.
5
The major applications for encryption may then be summarized as:
 To protect privacy and confidentiality.
 To transmit secure information (e.g. credit card details)
 To provide authentication of the sender of a message.
 To provide authentication of the time a message was sent.
E-commerce:
It is increasing at a very rapid rate. By the turn of the century, commercial
transactions on the Internet are expected to total hundreds of billions of dollars a
year. This level of activity could not be supported without cryptographic security.
It has been said that one is safer using a credit card over the Internet than within a
store or restaurant. It requires much more work to seize credit card numbers over
computer networks than it does to simply walk by a table in a restaurant and lay
hold of a credit card receipt. These levels of security, though not yet widely used,
give the means to strengthen the foundation with which e-commerce can grow.
People use e-mail to conduct personal and business matters on a daily basis.
E-mail has no physical form and may exist electronically in more than one place at
a time. This poses a potential problem as it increases the opportunity for an
eavesdropper to get a hold of the transmission. Encryption protects e-mail by
rendering it very difficult to read by any unintended party. Digital signatures can
also be used to authenticate the origin and the content of an e-mail message.
Authentication:
In some case cryptography allows you to have more confidence in your
electronic transactions than you do in real life transactions. For example, signing
documents in real life still leaves one vulnerable to the following scenario. After
signing your will, agreeing to what is put forth in the document, someone can
change that document and your signature is still attached. In the electronic world
this type of falsification is much more difficult because digital signatures are built
using the contents of the document being signed.
6
Access Control:
Cryptography is also used to regulate access to satellite and cable TV.
Cable TV is set up so people can watch only the channels they pay for. Since there
is a direct line from the Cable Company to each individual subscriber’s home, the
Cable Company will only send those channels that are paid for. Many companies
offer pay-per-view channels to their subscribers. Pay-per-view cable allows cable
subscribers to ``rent’’ a movie directly through the cable box. What the cable box
does is decode the incoming movie, but not until the movie has been ``rented.’’ If
a person wants to watch a pay-per-view movie, he/she calls the Cable Company
and requests it. In return, the Cable Company sends out a signal to the subscriber’s
cable box, which unscrambles (decrypts) the requested movie.
Satellite TV works slightly differently since the satellite TV companies do
not have a direct connection to each individual subscriber’s home. This means that
anyone with a satellite dish can pick up the signals. To alleviate the problem of
people getting free TV, they use cryptography. The trick is to allow only those
who have paid for their service to unscramble the transmission; this is done with
receivers (“unscramblers’’). Each subscriber is given a receiver; the satellite
transmits signals that can only be unscrambled by such a receiver (ideally). Payper-view works in essentially the same way as it does for regular cable TV.
As seen, cryptography is widely used. Not only is it used over the Internet,
but also it is used in phones, televisions, and a variety of other common household
items. Without cryptography, hackers could get into our e-mail, listen in on our
phone conversations, tap into our cable companies and acquire free cable service,
or break into our bank/brokerage accounts.
7
2. BASIC TECHNIQUES AND ALGORITHMS
A cryptographic algorithm, or cipher, is a mathematical function used in
the Encryption and decryption process. A cryptographic algorithm works in
Combination with a key, a word, numbers or phrase — to encrypt the plain text.
The same plain text encrypts to different cipher text with different keys. The
security of encrypted data is entirely dependent on two things: the strength of the
cryptographic algorithm and the secrecy of the key. A cryptographic algorithm,
plus all possible keys and all the protocols that make it work comprise a
cryptosystem.
The method of encryption and decryption is called a cipher. Some
cryptographic methods rely on the secrecy of the algorithms; such algorithms are
only of historical interest and are not adequate for real-world needs. All modern
algorithms use a key to control encryption and decryption; a message can be
decrypted only if the key matches the encryption key.
2.1 Symmetric Key Vs. Asymmetric Key Ciphers :
There are two classes of key-based encryption algorithms, symmetric (or
secret-key) and asymmetric (or public-key) algorithms. The difference is that
symmetric algorithms use the same key for encryption and decryption (or the
decryption key is easily derived from the encryption key), whereas asymmetric
algorithms use a different key for encryption and decryption, and the decryption
key cannot be derived from the encryption key.
Symmetric algorithms can be divided into stream ciphers and block
ciphers. Stream ciphers can encrypt a single bit of plain text at a time, whereas
block ciphers take a number of bits (typically 64 bits in modern ciphers), and
encrypt them as a single unit.
8
Asymmetric ciphers (also called public-key algorithms or generally public-key
cryptography) permit the encryption key to be public (it can even be published in
a newspaper), allowing anyone to encrypt with the key, whereas only the proper
recipient (who knows the decryption key) can decrypt the message. The encryption
key is also called the public key and the decryption key the private key or secret
key.
Modern cryptographic algorithms are no longer pencil-and-paper ciphers.
Strong cryptographic algorithms are designed to be executed by computers or
specialized hardware devices. In most applications, cryptography is done in
computer software.
Generally, symmetric algorithms are much faster to execute on a computer
than asymmetric ones. In practice they are often used together, so that a public-key
algorithm is used to encrypt a randomly generated encryption key, and the random
key is used to encrypt the actual message using a symmetric algorithm. This is
sometimes called hybrid encryption.
The most studied and probably the most widely spread symmetric cipher is
DES; the upcoming AES might replace it as the most widely used encryption
algorithm. RSA is probably the best-known asymmetric encryption algorithm.
2.2 Digital Signatures :
Some public-key algorithms can be used to generate digital signatures. A
digital signature is a small amount of data that was created using some secret key,
and there is a public key that can be used to verify that the signature was really
generated using the corresponding private key. The algorithm used to generate the
signature must be such that without knowing the secret key it is not possible to
create a signature that would verify as valid.
9
Digital signatures are used to verify that a message really comes from the
claimed sender (assuming only the sender knows the secret key corresponding to
his/her public key). They can also be used to timestamp documents: a trusted
party signs the document and its timestamp with his/her secret key, thus testifying
that the document existed at the stated time.
Digital signatures can also be used to testify (or certify) that a public key
belongs to a particular person. This is done by signing the combination of the key
and the information about its owner by a trusted key. The digital signature by a
third party (owner of the trusted key), the public key and information about the
owner of the public key are often called certificates.
The reason for trusting that third party key may again be that it was signed
by another trusted key. Eventually some key must be a root of the trust hierarchy
(that is, it is not trusted because it was signed by somebody, but because you
believe a priori that the key can be trusted). In a centralized key infrastructure
there are very few roots in the trust network (e.g., trusted government agencies;
such roots are also called certification authorities). In a distributed
infrastructure there need not be any universally accepted roots, and each party
may have different trusted roots (such of the party’s own key and any keys signed
by it). This is the web of trust concept used in e.g. PGP.
A digital signature of an arbitrary document is typically created by
computing a message digest from the document, and concatenating it with
information about the signer, a timestamp, etc. The resulting string is then
encrypted using the private key of the signer using a suitable algorithm. The
resulting encrypted block of bits is the signature. It is often distributed together
with information about the public key that was used to sign it. To verify a
signature, the recipient first determines whether it trusts that the key belongs to the
person it is supposed to belong to (using the web of trust or a priori knowledge),
10
and then decrypts the signature using the public key of the person. If the signature
decrypts properly and the information matches that of the message (proper
message digest etc.), the signature is accepted as valid.
Several methods for making and verifying digital signatures are freely available.
The most widely known algorithm is RSA.
2.3 Cryptographic Hash Functions :
Cryptographic hash functions are used in various contexts, for example to
compute the message digest when making a digital signature. A hash function
compresses the bits of a message to a fixed-size hash value in a way that
distributes the possible messages evenly among the possible hash values. A
cryptographic hash function does this in a way that makes it extremely difficult to
come up with a message that would hash to a particular hash value.
Cryptographic hash functions typically produce hash values of 128 or more
bits. This number (2128) is vastly larger than the number of different messages
likely to ever be exchanged in the world. The reason for requiring more than 128
bits is based on the birthday paradox. The birthday paradox roughly states that
given a hash function mapping any message to an 128-bit hash digest, we can
expect that the same digest will be computed twice when 264 randomly selected
messages have been hashed. As cheaper memory chips for computers become
available it may become necessary to require larger than 128 bit message digests
(such as 160 bits as has become standard recently).
Many good cryptographic hash functions are freely available. The most
famous cryptographic hash functions are those of the MD family, in particular
MD4 and MD5. MD4 has been broken, and MD5, although still in widespread use,
should be considered insecure as well. SHA-1 and RipeMD-160 are two examples
that are still considered state of the art.
11
2.4 Cryptographic Random Number Generators :
Cryptographic random number generators generate random numbers for use
in cryptographic applications, such as for keys. Conventional random number
generators
available
in
most
programming
languages
or
programming
environments are not suitable for use in cryptographic applications (they are
designed for statistical randomness, not to resist prediction by cryptanalysts).
In the optimal case, random numbers are based on true physical sources of
randomness that cannot be predicted. Such sources may include the noise from a
semiconductor device, the least significant bits of an audio input, or the intervals
between device interrupts or user keystrokes. The noise obtained from a physical
source is then “distilled” by a cryptographic hash function to make every bit
depend on every other bit. Quite often a large pool (several thousand bits) is used
to contain randomness, and every bit of the pool is made to depend on every bit of
input noise and every other bit of the pool in a cryptographically strong way.
When true physical randomness is not available, pseudo-random numbers
must be used. This situation is undesirable, but often arises on general purpose
computers. It is always desirable to obtain some environmental noise – even from
device latencies, resource utilization statistics, network statistics, keyboard
interrupts, or whatever. The point is that the data must be unpredictable for any
external observer; to achieve this, the random pool must contain at least 128 bits of
true entropy.
Cryptographic pseudo-random number generators typically have a large pool
(“seed value”) containing randomness. Bits are returned from this pool by taking
data from the pool, optionally running the data through a cryptographic hash
function to avoid revealing the contents of the pool. When more bits are needed,
the pool is stirred by encrypting its contents by a suitable cipher with a random key
(that may be taken from an unreturned part of the pool) in a mode which makes
12
every bit of the pool depend on every other bit of the pool. New environmental
noise should be mixed into the pool before stirring to make predicting previous or
future values even more impossible.
Even though cryptographically strong random number generators are not very
difficult to build if designed properly, they are often overlooked. The importance
of the random number generator must thus be emphasized – if done badly, it will
easily become the weakest point of the system.
2.5 Strength of Cryptographic Algorithms :
Good cryptographic systems should always be designed so that they are as
difficult to break as possible. It is possible to build systems that cannot be broken
in practice (though this cannot usually be proved). This does not significantly
increase system implementation effort; however, some care and expertise is
required. There is no excuse for a system designer to leave the system breakable.
Any mechanisms that can be used to circumvent security must be made explicit,
documented, and brought into the attention of the end users.
In theory, any cryptographic method with a key can be broken by trying all
possible keys in sequence. If using brute force to try all keys is the only option,
the required computing power increases exponentially with the length of the key.
A 32 bit key takes 232 (about 109) steps. This is something anyone can do on
his/her home computer. A system with 40 bit keys takes 240 steps – this kind of
computation requires something like a week (depending on the efficiency of the
algorithm) on a modern home computer. A system with 56 bit keys (such as DES)
takes a substantial effort (with a large number of home computers using distributed
effort, it has been shown to take just a few months), but is easily breakable with
special hardware. The cost of the special hardware is substantial but easily within
reach of organized criminals, major companies, and governments. Keys with 64
13
bits are probably breakable now by major governments, and within reach of
organized criminals, major companies, and lesser governments in few years. Keys
with 80 bits appear good for a few years, and keys with 128 bits will probably
remain unbreakable by brute force for the foreseeable future. Even larger keys are
sometimes used.
However, key length is not the only relevant issue. Many ciphers can be
broken without trying all possible keys. In general, it is very difficult to design
ciphers that could not be broken more effectively using other methods. Designing
your own ciphers may be fun, but it is not recommended for real applications
unless you are a true expert and know exactly what you are doing.
One should generally be very wary of unpublished or secret algorithms.
Quite often the designer is then not sure of the security of the algorithm, or its
security depends on the secrecy of the algorithm. Generally, no algorithm that
depends on the secrecy of the algorithm is secure. Particularly in software, anyone
can hire someone to disassemble and reverse-engineer the algorithm. Experience
has shown that the vast majority of secret algorithms that have become public
knowledge later have been pitifully weak in reality.
The key lengths used in public-key cryptography are usually much longer than
those used in symmetric ciphers. This is caused by the extra structure that is
available to the cryptanalyst. There the problem is not that of guessing the right
key, but deriving the matching secret key from the public key. In the case of RSA,
this could be done by factoring a large integer that has two large prime factors. In
the case of some other cryptosystems it is equivalent to computing the discrete
logarithm modulo a large integer (which is believed to be roughly comparable to
factoring when the moduli is a large prime number). There are public key
cryptosystems based on yet other problems.
14
To give some idea of the complexity for the RSA cryptosystem, a 256 bit
modulus is easily factored at home, and 512 bit keys can be broken by university
research groups within a few months. Keys with 768 bits are probably not secure
in the long term. Keys with 1024 bits and more should be safe for now unless
major cryptographical advances are made against RSA; keys of 2048 bits are
considered by many to be secure for decades.
It should be emphasized that the strength of a cryptographic system is
usually equal to its weakest link. No aspect of the system design should be
overlooked, from the choice algorithms to the key distribution and usage policies.
2.6 Cryptanalysis and Attacks on Cryptosystems :
Cryptanalysis is the art of deciphering encrypted communications without
knowing the proper keys. There are many cryptanalytic techniques. Some of the
more important ones for a system implementer are described below.
 Ciphertext-only attack: This is the situation where the attacker does not
know anything about the contents of the message, and must work from
ciphertext only. In practice it is quite often possible to make guesses about
the plaintext, as many types of messages have fixed format headers. Even
ordinary letters and documents begin in a very predictable way. For
example, many classical attacks use frequency analysis of the ciphertext,
however, this does not work well against modern ciphers.
Modern cryptosystems are not weak against ciphertext-only attacks,
although sometimes they are considered with the added assumption that the
message contains some statistical bias.
15
 Known-plaintext attack: The attacker knows or can guess the plaintext for
some parts of the ciphertext. The task is to decrypt the rest of the ciphertext
blocks using this information. This may be done by determining the key
used to encrypt the data, or via some shortcut.
One of the best known modern known-plaintext attacks is linear
cryptanalysis against block ciphers.
 Chosen-plaintext attack: The attacker is able to have any text he likes
encrypted with the unknown key. The task is to determine the key used for
encryption. A good example of this attack is the differential cryptanalysis
which can be applied against block ciphers (and in some cases also against
hash functions).
Some cryptosystems, particularly RSA, are vulnerable to chosen-plaintext
attacks. When such algorithms are used, care must be taken to design the
application (or protocol) so that an attacker can never have chosen plaintext
encrypted.
 Man-in-the-middle attack: This attack is relevant for cryptographic
communication and key exchange protocols. The idea is that when two
parties, A and B, are exchanging keys for secure communication (e.g., using
Diffie-Hellman), an adversary positions himself between A and B on the
communication line. The adversary then intercepts the signals that A and B
send to each other, and performs a key exchange with A and B separately.
A and B will end up using a different key, each of which is known to the
adversary. The adversary can then decrypt any communication from A with
the key he shares with A, and then resends the communication to B by
encrypting it again with the key he shares with B. Both A and B will think
that they are communicating securely, but in fact the adversary is hearing
everything.
16
The usual way to prevent the man-in-the-middle attack is to use a public
key cryptosystem capable of providing digital signatures. For set up, the
parties must know each others public keys in advance. After the shared
secret has been generated, the parties send digital signatures of it to each
other. The man-in-the-middle can attempt to forge these signatures, but fails
because he cannot fake the signatures. This solution is sufficient in the
presence of a way to securely distribute public keys. One such way is a
certificate hierarchy such as X.509. It is used for example in IPSec.
 Correlation between the secret key and the output of the cryptosystem is
the main source of information to the cryptanalyst. In the easiest case, the
information about the secret key is directly leaked by the cryptosystem.
More complicated cases require studying the correlation (basically, any
relation that would not be expected on the basis of chance alone) between
the observed (or measured) information about the cryptosystem and the
guessed key information.
For example, in linear (resp. differential) attacks against block ciphers the
cryptanalyst studies the known (resp. chosen) plaintext and the observed
ciphertext. Guessing some of the key bits of the cryptosystem the analyst
determines by correlation between the plaintext and the ciphertext whether
she guessed correctly. This can be repeated, and has many variations.
The differential cryptanalysis introduced by Eli Biham and Adi Shamir in
late 1980’s was the first attack that fully utilized this idea against block
ciphers (especially against DES). Later Mitsuru Matsui came up with linear
cryptanalysis which was even more effective against DES. More recently,
new attacks using similar ideas have been developed.
17
Perhaps the best introduction to this material is the proceedings of
EUROCRYPT and CRYPTO throughout the 1990’s. There can be found
Mitsuru Matsui’s discussion of linear cryptanalysis of DES, and the ideas of
truncated differentials by Lars Knudsen (for example, IDEA cryptanalysis).
The book by Eli Biham and Adi Shamir about the differential cryptanalysis
of DES is the “classical” work on this subject.
The correlation idea is fundamental to cryptography and several researchers
have tried to construct cryptosystems which are provably secure against
such attacks. For example, Knudsen and Nyberg have studied provable
security against differential cryptanalysis.
 Attack against or using the underlying hardware: in the last few years as
more and more small mobile crypto devices have come into widespread use,
a new category of attacks has become relevant which aim directly at the
hardware implementation of the cryptosystem.
The attacks use the data from very fine measurements of the crypto device
doing, say, encryption and compute key information from these
measurements. The basic ideas are then closely related to those in other
correlation attacks. For instance, the attacker guesses some key bits and
attempts to verify the correctness of the guess by studying correlation
against her measurements.
Several attacks have been proposed such as using careful timings of the
device, fine measurements of the power consumption, and radiation
patterns. These measurements can be used to obtain the secret key or other
kinds information stored on the device.
This attack is generally independent of the used cryptographical algorithms
and can be applied to any device that is not explicitly protected against it.
18
 Faults in cryptosystems can lead to cryptanalysis and even the discovery
of the secret key. The interest in cryptographical devices lead to the
discovery that some algorithms behaved very badly with the introduction of
small faults in the internal computation.
For example, the usual implementation of RSA private key operations are
very suspectible to fault attacks. It has been shown that by causing one bit
of error at a suitable point can reveal the factorization of the modulus (i.e. it
reveals the private key).
Similar ideas have been applied to a wide range of algorithms and devices.
It is thus necessary that cryptographical devices are designed to be highly
resistant against faults (and against malicious introduction of faults by
cryptanalysts).
 Quantum computing: Peter Shor’s paper on polynomial time factoring and
discrete logarithm algorithms with quantum computers has caused growing
interest in quantum computing. Quantum computing is a recent field of
research that uses quantum mechanics to build computers that are, in
theory, more powerful than modern serial computers. The power is derived
from the inherent parallelism of quantum mechanics. So instead of doing
tasks one at a time, as serial machines do, quantum computers can perform
them all at once. Thus it is hoped that with quantum computers we can
solve problems infeasible with serial machines.
Shor’s results imply that if quantum computers could be implemented
effectively then most of public key cryptography will become history.
However, they are much less effective against secret key cryptography.
19
Current state of the art of quantum computing does not appear alarming, as
only very small machines have been implemented. The theory of quantum
computation gives much promise for better performance than serial
computers, however, whether it will be realized in practice is an open
question.
Quantum mechanics is also a source for new ways of data hiding and secure
communication with the potential of offering unbreakable security, this is
the field of quantum cryptography. Unlike quantum computing, many
successful experimental implementations of quantum cryptography have
been already achieved. However, quantum cryptography is still some way
off from being realized in commercial applications.
 DNA cryptography: Leonard Adleman (one of the inventors of RSA) came
up with the idea of using DNA as computers. DNA molecules could be
viewed as a very large computer capable of parallel execution. This parallel
nature could give DNA computers exponential speed-up against modern
serial computers.
There are unfortunately problems with DNA computers, one being that the
exponential speed-up requires also exponential growth in the volume of the
material needed. Thus in practice DNA computers would have limits on
their performance. Also, it is not very easy to build one.
There are many other cryptographic attacks and cryptanalysis techniques.
However, these are probably the most important ones for an application designer.
Anyone contemplating to design a new cryptosystem should have a much deeper
understanding of these issues.
20
3. DATA ENCRYPTION AND ITS APPLICATIONS
Applications of Cryptography include the most important protocols and
systems made possible by cryptography. In particular they discuss the issues
involved in establishing a cryptographic infrastructure, and it gives a brief
overview of some of the electronic commerce techniques available today. They
are:
 Key Management
 Electronic Commerce
3.1 Key Management:
3.1.1 Key management – an Introduction:
Key management deals with the secure generation, distribution, and storage
of keys. Secure methods of key management are extremely important. Once a key
is randomly generated, it must remain secret to avoid unfortunate mishaps (such as
impersonation). In practice, most attacks on public-key systems will probably be
aimed at the key management level, rather than at the cryptographic algorithm
itself.
Users must be able to securely obtain a key pair suited to their efficiency
and security needs. There must be a way to look up other people’s public keys and
to publicize one’s own public key. Users must be able to legitimately obtain
others’ public keys; otherwise, an intruder can either change public keys listed in a
directory, or impersonate another user. Certificates are used for this purpose.
Certificates must be unforgeable. The issuance of certificates must proceed in a
secure way, impervious to attack. In particular, the issuer must authenticate the
identity and the public key of an individual before issuing a certificate to that
individual.
21
If someone’s private key is lost or compromised, others must be made
aware of this, and so they will no longer encrypt messages under the invalid public
key nor accept messages signed with the invalid private key. Users must be able to
store their private keys securely, so no intruder can obtain them, yet the keys must
be readily accessible for legitimate use. Keys need to be valid only until a
specified expiration date but the expiration date must be chosen properly and
publicized in an authenticated channel.
3.1.2 The size of the key :
The key size that should be used in a particular application of cryptography
depends on two things. First of all, the value of the key is an important
consideration. Secondly, the actual key size depends on what cryptographic
algorithm is being used.
Due to the rapid development of new technology and cryptanalytic
methods, the correct key size for a particular application is continuously changing.
The table below contains key size limits and recommendations from different
sources for block ciphers, the RSA system, the elliptic curve system, and DSA.
Export Grade
Traditional
recommendations
Lenstra/Verheul
2000
Lenstra/Verheul
2010
Block
Cipher
RSA
Elliptic Curve DSA
56
80
112
512
1024
2048
112
160
224
512 / 112
1024 / 160
2048 / 224
70
952
132
952 / 125
78
1369
146 / 160
1369 / 138
Minimal key lengths in bits for different grades.
22
3.1.3 Finding Random Numbers for keys :
Whether using a secret-key cryptosystem or a public-key cryptosystem, one
needs a good source of random numbers for key generation. The main features of a
good source are that it produces numbers that are unknown and unpredictable by
potential adversaries. Random numbers obtained from a physical process are in
principle the best, since many physical processes appear truly random. One could
use a hardware device, such as a noisy diode; some are sold commercially on
computer add-in boards for this purpose. Another idea is to use physical
movements of the computer user, such as inter-key stroke timings measured in
microseconds. Techniques using the spinning of disks to generate random data are
not truly random, as the movement of the disk platter cannot be considered truly
random. A negligible-cost alternative is available; Davis et al. designed a random
number generator based on the variation of a disk drive motor’s speed. This
variation is caused by air turbulence, which has been shown to be unpredictable.
By whichever method they are generated, the random numbers may still contain
some correlation, thus preventing sufficient statistical randomness. Therefore, it is
best to run them through a good hash function before actually using them.
Another approach is to use a pseudo-random number generator fed by a
random seed. The primary difference between random and pseudo-random
numbers is that pseudo-random numbers are necessarily periodic whereas truly
random numbers are not. Since pseudo-random number generators are
deterministic algorithms, it is important to find one that is cryptographically secure
and also to use a good random seed; the generator effectively acts as an
``expander’’ from the seed to a larger amount of pseudo-random data. The seed
must be sufficiently variable to deter attacks based on trying all possible seeds.
It is not sufficient for a pseudo-random number generator just to pass a
variety of statistical tests, as described in Knuth and elsewhere, because the output
of such generators may still be predictable. Rather, it must be computationally
23
infeasible for an attacker to determine any bit of the output sequence, even if all
the others are known, with probability better than ½. Blum and Micali’s generator
based on the discrete logarithm problem satisfies this stronger definition, assuming
that computing discrete logarithm is difficult. Other generators perhaps based on
DES or a hash function can also be considered to satisfy this definition, under
reasonable assumptions.
3.1.4 Life cycle of a key :
Keys have limited lifetimes for a number of reasons. The most important
reason is protection against cryptanalysis. Each time the key is used, it generates a
number of ciphertexts. Using a key repetitively allows an attacker to build up a
store of ciphertexts (and possibly plaintexts) which may prove sufficient for a
successful cryptanalysis of the key value. Thus keys should have a limited lifetime.
If you suspect that an attacker may have obtained your key, the key should be
considered compromised, and its use discontinued.
Research in cryptanalysis can lead to possible attacks against either the key
or the algorithm. For example, recommended RSA key lengths are increased every
few years to ensure that the improved factoring algorithms do not compromise the
security of messages encrypted with RSA. The recommended key length depends
on the expected lifetime of the key. Temporary keys, which are valid for a day or
less, may be as short as 512 bits. Keys used to sign long-term contracts for
example, should be longer, say, 1024 bits or more.
Another reason for limiting the lifetime of a key is to minimize the damage
from a compromised key. It is unlikely a user will discover an attacker has
compromised his or her key if the attacker remains ``passive.’’ Relatively frequent
key changes will limit any potential damage from compromised keys.
24
The life cycle of a key can described as:
1. Key generation and possibly registration (for a public key).
2. Key distribution.
3. Key activation/deactivation.
4. Key replacement or key update.
5. Key revocation.
6. Key termination, involving destruction or possibly archival.
3.2 Electronic Commerce :
Cryptography is extremely useful to electronic commerce in the areas of
payment systems, and transactions over open networks. While several protocols
and payment systems are existing, the most widely used protocol for internet
transactions is SSL.
3.2.1 Electronic money :
Electronic money (also called electronic cash or digital cash) is a term that
is still fairly vague and undefined. It refers to transactions carried out
electronically with a net result of funds transferred from one party to another.
Electronic money may be either debit or credit. Digital cash per se is basically
another currency, and digital cash transactions can be visualized as a foreign
exchange market. This is because we need to convert an amount of money to
digital cash before we can spend it. The conversion process is analogous to
purchasing foreign currency.
Digital cash in its precise definition may be anonymous or identified.
Anonymous schemes do not reveal the identity of the customer and are based on
blind signature schemes. Identified spending schemes always reveal the identity of
the customer and are based on more general forms of signature schemes.
25
Anonymous schemes are the electronic analog of cash, while identified schemes
are the electronic analog of a debit or credit card. There are other approaches,
payments can be anonymous with respect to the merchant but not the bank, or
anonymous to everyone, but traceable (a sequence of purchases can be related, but
not linked directly to the spender’s identity).
Since digital cash is merely an electronic representation of funds, it is
possible to easily duplicate and spend a certain amount of money more than once.
Therefore, digital cash schemes have been structured so that it is not possible to
spend the same money more than once without getting caught immediately or
within a short period of time. Another approach is to have the digital cash stored in
a secure device, which prevents the user from double spending. Electronic money
also encompasses payment systems that are analogous to traditional credit cards
and checks. Here, cryptography protects conventional transaction data such as an
account number and amount; a digital signature can replace a handwritten
signature or a credit-card authorization, and public-key encryption can provide
confidentiality.
There are a variety of systems for this type of electronic money, ranging
from those that are strict analogs of conventional paper transactions with a typical
value of several dollars or more, to those (not digital cash per se) that offer a form
of “micropayments” where the transaction value may be a few pennies or less. The
main difference is that for extremely low-value transactions even the limited
overhead of public-key encryption and digital signatures is too much, not to
mention the cost of ``clearing’’ the transaction with bank. As a result, ``batching’’
of transactions is required, with the public key operations done only occasionally.
26
3.2.2 The iKP :
The Internet Keyed Payments Protocol (iKP) is an architecture for secure
payments involving three or more parties. Developed at IBM’s T.J. Watson
Research Center and Zurich Research Laboratory, the protocol defines transactions
of a “credit card” nature, where a buyer and seller interact with a third party
“acquirer”, such as a credit-card system or a bank, to authorize transactions. The
protocol is based on public-key cryptography.
IKP is no longer widely in use, however it is the current foundation for SET.
3.2.3 SET:
Visa and MasterCard have jointly developed the Secure Electronic
Transaction (SET) protocol as a method for secure, cost effective bankcard
transactions over open networks. SET includes protocols for purchasing goods and
services electronically, requesting authorization of payment, and requesting
“credentials” that is, certificates) binding public keys to identities, among other
services. Once SET is fully adopted, the necessary confidence in secure electronic
transactions will be in place, allowing merchants and customers to partake in
electronic commerce.
SET supports DES for bulk data encryption and RSA for signatures and
public-key encryption of data encryption keys and bankcard numbers. The RSA
public-key encryption employs Optimal Asymmetric Encryption Padding. SET is
being published as open specifications for the industry, which may be used by
software vendors to develop applications.
27
4. EXISTING SYSTEMS – PROS AND CONS
Theoretically speaking, no crypto system is completely unbreakable.
However, as the complexity of the crypto algorithm increases it becomes
practically impossible to the crypto analyst to break it using even the most modern
and powerful computing hardware. As the power of the hardware increases with
time, and more computing power become available to the crypto analyst, the
robustness of the crypto cipher should also be increased.
Traditional private key algorithms like DES increases the length of the
cipher key to resist the brute force attacks. For example, some 10 years ago, when
a typical high-end computer system used to run at the speed in the order of 100
MHz or so, a DES cipher of 64 Bit was pretty secure. But using to day’s high-end
systems which operate typically around 1.5 GHz speed, the old 64 Bit DES cipher
is no longer secure. We need a 128 bit or greater cipher to withstand the brute
force attacks using the modern high-end systems.
Though increasing the key length is a simple solution to make the algorithm
practically impossible to break, it has its own price to pay for. As the length of the
key increases the time to Encrypt and Decrypt the input will drastically increase.
More over, additional secure methods are needed to store and transport such
lengthy keys. All these side effects effectively reduce the overall security the
cipher offers and also hampers the performance of the crypto system.
Public key crypto systems like the RSA can solve the some of the
traditional problems associated with Private key cryptographic systems like DES.
Irrespective of the length of the key, these systems offer a reasonably good degree
of security. However, these algorithms are formidably complex and tediously slow
when compared to symmetric key algorithms. Thus they are not very suitable for
developing Block Cipher based crypto systems.
28
Particularly for developing a static data encryption system like the one that
handles databases, images, audio and video files, binary data using a public key
based algorithm is impractical as they are very slow. Symmetric key crypto
systems like the DES with some degree of sophistication are very well suited for
such applications.
Many such applications use a hybrid of symmetric and asymmetric ciphers.
For example, a system can use the RSA techniques to generate the key, which in
turn will be used by a DES cipher to encrypt the data. Though this solution seems
to be a sound one to avoid the many performance bottlenecks associated with the
traditional Asymmetric key crypto systems, it can’t be an effective and universal
alternative for all cases. There are many tradeoffs in this approach.
To overcome these tradeoffs, crypto experts devised several other
techniques. The proposed cipher is on such system that aims at using the basic
DES routines for core encryption. However, the key that the system uses will be
generated using a complex set of discrete mathematical functions.
29
5. CRYPTOGRAPHIC HASH FUNCTIONS
Hash functions were introduced in cryptology in the late seventies as a tool
to protect the authenticity of information. Soon it became clear that they were a
very useful building block to solve other security problems in telecommunication
and computer networks. This chapter sketches the history of the concept, discusses
the applications of hash functions, and presents the approaches which have been
followed to construct hash functions. An overview of practical constructions and
their performance is given and some attacks are discussed. Special attention is paid
to standards dealing with hash functions.
5.1 Introduction
During the last decades, the nature of telecommunications has changed
completely. Telecommunications more and more pervades every aspect of society.
Recent developments in mobile telecommunications like the GSM system make it
possible to reach a person any where in the world, independent of whether he is at
home, in his office, or on the road. Electronic mail has become the preferable way
of communication between researchers all over the world, and many companies
have introduced this service. At the same time EDI (Electronic Data Interchange)
is being introduced in order to extend the automatic information processing within
a company to suppliers and clients into a single system.
Home banking is becoming more and more popular and is the first step
towards shopping from the home. This evolution of telecommunications presents
new security requirements, posing new challenges to the cryptologists.
Handwritten letters offer reasonable privacy protection and the receiver can be
sure of the authenticity, which encompasses two aspects: he knows whether sender
is and he knows that the contents has not been modified. Voice communications
30
can be eavesdropped easily, but at least they offer a guarantee of the authenticity
of the communication: one is sure that one is talking to a specific person, and that
the conversation is not being modified.
Electronic data communications however offer no protection of privacy or
authenticity. An additional challenge is that it is not sufficient to design solutions
for closed user groups, since one requires often worldwide systems which work in
a wide variety of environments. In this chapter, we will discuss hash functions,
which form an important cryptographic technique to protect the authenticity of
information
5.2 Authentication and Privacy
This section discusses the basic concepts of cryptography, and clarifies the
importance of hash functions in the protection of information authentication. At
the end of this section, other applications of hash functions are presented.
5. 2.1 Privacy protection with symmetric cryptology
Cryptology has been used for thousands of years to protect communications
of kings, soldiers, and diplomats. Until recently, the protection of communications
was almost a synonym for the protection of the secrecy of the information, which
is achieved by encryption. In the encryption operation, the sender transforms the
message to be sent, which is called the plain text, into the cipher text. The
encryption algorithm uses as parameter a secret key; the algorithm itself is public,
which is known as Kerckhoffs’s principle. The receiver can use the decryption
algorithm and the same secret key to transform the cipher text back into the plain
text. The main concept of encryption is to replace the secrecy of a large amount of
data by the secrecy of a short secret key which can be communicated via a secure
channel. Because the key for encryption and decryption are equal, this approach is
called symmetric cryptography.
31
It was widely believed that protection of the authenticity would follow
automatically from protection of the secrecy: if the receiver obtains a
“meaningful” plaintext, he can be sure that the sender with whom he shares the
key has actually sent this message. This belief is wrong: in general “meaningful”
plaintext can only be distinguished from ‘random’ plaintext based on redundancy,
which is not always present. Even if the plaintext has redundancy, modifications
can sometimes be made which will escape detection. This holds especially for
additive ciphers, where the cipher text is obtained by adding a key stream modulo
to the plaintext: complementing a cipher text bit results in a complementation of
the corresponding plain text bit. However, in the old days the authenticity was
protected by the intrinsic properties of the communication channel.
The advent of electronic computers and telecommunication networks
created the need for a widespread commercial encryption algorithm. In this
respect, the publication in 1977 of the Data Encryption Standard (DES) by the U.S.
National Bureau of Standards was with out any doubt an important milestone. The
DES was designed by IBM in cooperation with the National Security Agency
(NSA). It later became an ANSI banking standard. Soon the need for specific
measures to protect the authenticity of the information became obvious, since
authenticity does not come for free together with secrecy protection. The first idea
to solve this problem was to add a simple form of redundancy to the plaintext
before encryption, namely the sum modulo of all plaintext blocks. This showed to
be insufficient, and techniques to construct redundancy which is a complex
function of the complete message were proposed. It is not surprising that the first
constructions were based on the DES.
32
5.2.2 Authentication with symmetric cryptology
In the military world it was known for some time that modern
telecommunication channels like radio require additional protection of the
authenticity. One of the techniques applied was to append a secret key to the
plaintext before encryption. The protection then relies on the error propagating
properties of the encryption algorithm and on the fact that the secret key for
authentication is used only once. In the banking environment, there is a strong
requirement for protecting the authenticity of transactions.
Before the advent of modern cryptology, this was achieved as follows: the
sender computes a function of the transaction totals and a secret key; the result,
which was called the test key, is appended to the transaction. This allows the
receiver of the message, who is also privy to the secret key, to verify the
authenticity of the transaction. Although both solutions are not suited for a wider
and less restrictive environment, they form the embryonic stadium of the concept
of hash functions. New techniques were proposed to produce redundancy under the
form of a short string which is a complex function of the complete message.
A function that compresses its input was already in use in computer science
to allocate as uniformly as possible storage for the records of a file. It was called a
hash function, and its result was called a hash code. If a hash function has to be
useful for cryptographic applications, it has to satisfy some additional conditions.
Informally, one has to impose that the hash function is one-way (hard to invert)
and that it is hard to find two colliding inputs, i.e., two inputs with the same
output. If the information is to be linked with an originator, a secret key has to be
involved in the hashing process (this assumes a coupling between the person and
his key), or a separate integrity channel has to be provided. Hence two basic
methods can be identified:
33
 The first approach is analogous to the approach of a symmetric cipher,
where the secrecy of large data quantities is based on the secrecy and
authenticity of a short key. In this case the authentication of the information
will also rely on the secrecy and authenticity of a key. To achieve this goal,
the information is compressed with a hash function, and the hash code is
appended to the information. The basic idea of the protection of the
integrity is to add redundancy to the information. The presence of this
redundancy allows the receiver to make the distinction between authentic
information and bogus information. In order to guarantee the origin of the
data, a secret key that can be associated to the origin has to intervene in the
process. The secret key can be involved in the compression process; the
hash function is then called a Message Authentication Code or MAC. A
MAC is recommended if authentication without secrecy is required. If the
hash function uses no secret key, it is called a Manipulation Detection Code
or MDC; in this case it is necessary to encrypt the hash code and/or the
information with a secret key. In addition, the encryption algorithm must
have a strong error propagation: the cipher text must depend on all previous
plaintext bits in a complex way. Additive stream ciphers can definitely not
be used for this purpose.
 The second approach consists of basing the authenticity (both integrity and
origin authentication) of the information on the authenticity of a
Manipulation Detection Code or MDC. A typical example for this approach
is an accountant who will send the payment instructions of his company
over an insecure computer network to the bank. He computes an MDC on
the file, and communicates the MDC over the telephone to the bank
manager. The bank manager computes the MDC on the received message
and verifies whether it has been modified. The authenticity of the telephone
channel is offered here by voice identification. Note that the addition of
redundancy is necessary but not sufficient. Special care has to betaken
against high level attacks, like a replay of an authenticated message.
34
5.2.3 Asymmetric or public-key cryptology
From a scientific viewpoint, the most important breakthrough of the last
decennia is certainly the invention of public-key cryptology in the mid seventies
by W. Diffie and M. Hellman ,and independently by R. Merkle. Public key
cryptology has brought two important insights:
 Sender and receiver do not need to share a secret key: it is sufficient that
they use an authentic channel to communicate a key.
 One can produce an electronic equivalent of a handwritten signature: the
digital signature. As a by-product of their results, it became clear that
secrecy and authenticity are two in-dependent properties of a cryptosystem:
if the encryption key is public, anyone can use to send an enciphered
message to a certain receiver. Protection of the authenticity of the
information is possible, but this requires a second independent operation.
There are several reasons why conventional techniques are still widely used
in spite of the development of public-key cryptology. The most important
one is certainly that no efficient public-key cryptosystems are known. In the
first years after the invention of public-key crypto systems, serious doubts
have been raised about their security. A good example is the rise and fall of
the knapsack-based schemes. These systems were very attractive because of
their good performance. Unfortunately, almost all public-key cryptosystems
based on knapsacks were shown to be insecure . It has taken more than 10
years before two schemes of the late seventies have reached the market. The
Diffie-Hellman scheme, proposed in 1976, is widely used for key
agreement, and the RSA scheme proposed by R. Rivest,A. Shamir, and L.
Adleman in 1978
is used for both digital signatures and public-key
encryption. The disadvantages of both schemes are that they are two to
three orders of magnitude slower than all conventional systems, and that the
key and block size are about10 times larger. Soon it was realized that one
35
could have the best of both worlds, i.e., more flexibility, a less cumbersome
key management, and a high performance, by using hybrid schemes. One
uses public key techniques for key establishment, and subsequently a
conventional algorithm like DES or triple-DES to encipher large quantities
of data. If one wants to take a similar approach to authenticity protection,
one can use cryptographic hash functions as follows: one first compresses
the data with a fast hash function to a short string of fixed length. The slow
digital signature scheme is then used to protect the authenticity of the hash
code.
5.2.4 Other applications of hash functions
Hash functions have been designed in the first place to protect the
authenticity of information. When efficient and secure hash functions became
available, it was realized that under certain assumptions they can be used for many
other applications. For some applications it is required that the hash function
behaves as a “random” function. This implies that there is no correlation between
input and output bits, no correlation between output bits, etc. The most important
applications are the following:
 Protection of pass-phrases: pass phrases are passwords of arbitrary length.
One will store the MDC corresponding to the pass phrase in the computer
rather than the password itself.
 Construction of efficient digital signature schemes: this comprises the
construction of efficient signature schemes based on hash functions only, as
well as the construction of digital signature schemes from zero-knowledge
protocols.
 Building block in practical protocols including entity authentication
protocols, key distribution protocols, and bit commitment.
36
 Construction of encryption algorithms: while the first hash functions were
based on block ciphers, the advent of fast hash functions has led to the
construction of encryption algorithms based on hash functions.
5.3 Definitions
In the previous section two classes of hash functions have been introduced,
namely Message Authentication Codes or MAC’s (which use a secret key), and
Manipulation Detection Codes or MDC’s, which do not make use of a secret key.
According to their properties, the class of MDC’s will be further divided into oneway hash functions (OWHF) and collision resistant hash functions(CRHF). In the
following the hash function will be denoted with h, and its argument, i.e., the
information to be protected with X. The image of X under the hash function h will
be denoted with h(X). The general requirements are that the computation of the
hash code is “easy” if all arguments are known. Moreover it is assumed that the
description of the hash function is public; for MAC’s the only secret information
lies is the secret key.
5.3.1 One-way hash function (OWHF)
The first informal definition of a OWHF was given by R. Merkle and M. Rabin.
Definition: A one-way hash function is a function h satisfying the following
conditions:
1. The argument X can be of arbitrary length and the result h(X) has a fixed length
of nbits (with n = 64).
2. The hash function must be one-way in the sense that given a Y in the image of
h, it is “hard” to find a message X such that h(X) = Y , and given X and h(X) it is
“hard” to find a message X = X such that h(X ) = h(X).The first part of the second
condition corresponds to the intuitive concept of one-way ness, namely that it is
37
“hard” to find a pre image of a given value in the range. In the case of
permutations or injective functions only this concept is relevant. The second part
of this condition, namely that finding a second pre image should be hard, is a
stronger condition, that is relevant for most applications. The meaning of “hard”
still has to be specified. In the case of “ideal security”, introduced by X. Lai and J.
Massey, producing a (second)pre image requires 2n operations. However, it may
be that an attack requires a number of operations that is smaller than 2n, but is still
computationally infeasible.
5.3.2 Collision resistant hash function (CRHF)
The first formal definition of a CRHF was given by I. Damgard; an informal
definition was given by R. Merkle.
Definition: A collision resistant hash function is a function h satisfying the
following conditions:
1. The argument X can be of arbitrary length and the result h(X) has a fixed
length of n bits (with n = 128).
2. The hash function must be one-way in the sense that given a Y in the image of
h, it is “hard” to find a message X such that h(X) = Y , and given X and h(X) it
is “hard” to find a message X = X such that h(X ) = h(X).
3. The hash function must be collision resistant: this means that it is “hard” to find
two distinct messages that hash to the same result. Under certain conditions one
can argue that the first part of the one-way property follows from the collision
resistant property. Again several options are available to specify the word
“hard”. In the case of “ideal security”, producing a (second) pre image requires
2n operations and producing a collision requires O(2n/2) operations. This can
explain why both conditions have been stated separately. One can however also
38
consider the case where producing a (second) pre image and a collision
requires at least O(2n/2) operations, and finally the case where one or both
attacks require less than O(2n/2) operations, but then umber of operations is
still computationally infeasible (e.g., if a larger value of n is selected).The
choice between a OWHF and a CRHF is application dependent. A CRHF is
stronger than a OWHF, which implies that using a CRHF is playing safe. A
OWHF can only be used if the opponent can not exploit the collisions, e.g., if
the argument is randomized before the hashing operation. On the other hand, it
should be noted that designing a OWHF is easier, and that the storage for the
hash code can be halved (64 bits instead of 128 bits). A disadvantage of a
OWHF is that the security level decreases with the number of applications of h:
an outsider who knows hash codes has increased his probability to find an X
with a factor of s. This limitation can be overcome through the use of a
parameterized OWHF.
5.3.3 Message Authentication Code (MAC)
Message Authentication Codes have developed from the test keys in the banking
community. However, these algorithms did not satisfy this strong definition.
Definition: A MAC is a function satisfying the following conditions:
1. The argument X can be of arbitrary length and the result h(K,X) has a fixed
length of n bits (with n = 32...64).
2. Given h and X, it is “hard” to determine h(K,X) with a probability of success
“significantly higher” than 1/2n. Even when a large number of pairs
{Xi,h(K,Xi)} are known, where the Xi have been selected by the opponent, it is
“hard” to determine the key K or to compute h(K,X ) for any X = Xi. This last
attack is called an adaptive chosen text attack .Note that this last property
implies that the MAC should be both one-way and collision resistant for
39
someone who does not know the secret key K. This definition leaves open
whether or not a MAC should be one-way or collision resistant for someone
who knows K. An example where this property could be useful is the
authentication of multi destination messages.
5.4 Attacks on hash functions
The discussion of attacks will be restricted to attacks which depend only on
the size of the external parameters (size of hash code and possibly size of key);
they are thus independent of the nature of the algorithm. In order to asses the
feasibility of these attacks, it is important to know that for the time being
256operations is considered to be on the edge of feasibility.
In view of the fact that the speed of computers is multiplied by four every
three years, 264operations is sufficient for the next 10 years, but it will be only
marginally secure within 20years. For applications with a time frame of 20 years
or more, one should try to design the scheme such that an attack requires at least
280operations.Random attack The opponent selects a random message and hopes
that the change will remain undetected.
In case of a good hash function, his probability of success equals 1/2nwith n
the number of bits of the hash code. The feasibility of this attack depends on the
action taken in case of detection of an erroneous result, on the expected value of a
successful attack, and on the number of attacks that can be carried out. For most
application this implies that n = 32 bits is not sufficient .Birthday attack This
attack can only be used to produce collisions. The idea behind the birthday attack
is that for a group of 23 people the probability that at least two people have a
common birthday exceeds 1/2. Intuitively one would expect that the group should
be significantly larger. This can be exploited to attack a hash function in the
following way: an adversary generates r1variations on a bogus message and
40
r2variations on a genuine message. The probability of finding a bogus message
and a genuine message that hash to the same result is given by1 - exp -r1·
r22n,which is about 63 % when r = r1= r2= 2n2. Note that in case of a MAC the
opponent is unable to generate the MAC of a message. He could however obtain
these MAC’s with a chosen plaintext attack.
A second possibility is that he collects a large number of messages and
corresponding MAC’s and divides them into two categories, which corresponds to
a known plaintext attack. The involved comparison problem does not require
r2operations:after sorting the data, which requires O(r log r) operations,
comparison is easy. Jueneman has shown in 1986 that for n = 64 the processing
and storage requirements were feasible in reasonable time with the computer
power available in every large organization. A time-memory-processor trade-off is
possible. If the function can be called as a black box, one can use the collision
search algorithm proposed by J.-J. Quisquater , that requires about 2 π/2 ·
2n2operations and negligible storage.
To avoid this attack with a reasonable safety margin, n should be at least
128 bits. This explains the second condition in Definition 2 of a CRHF. In case of
digital signatures, a sender can attack his own signature or the receiver or a third
party could offer the signer a message he’s willing to sign and replace it later with
the bogus message. Only the last attack can be thwarted through randomizing the
message just prior to signing. If the sender attacks his own signature, the
occurrence of two messages that hash to the same value might make the signer
suspect, but it will be very difficult to prove the denial to a third party. Exhaustive
key search This attack is only relevant in case of a MAC. It is a known plaintext
attack, where an attacker knows M plaintext-MAC pairs for a given key and will
try to determine the key by trying all possible keys. The expected number of trials
equals2k-1, with k the size of the key in bits. In order to determine the key
uniquely, M has to be slightly larger than k/n.
41
Hash functions are becoming an important basic tool to solve other security
problems. The design of cryptographic hash functions that are both secure and
efficient seems to be a difficult problem. For the time being only a limited number
of provably secure constructions exist, that are rather slow or require a large
number of key bits. Some theoretical results are available to support practical
constructions, but most of our knowledge on practical schemes is originating from
trial and error procedures. Therefore it is important that new proposals are
evaluated thoroughly by several independent researchers and that they are not
implemented too quickly. Moreover implementations should be modular such that
upgrading of the algorithm is feasible. The choice between different algorithms
will also depend on the required performance. In the past standardization has
played an important role, and since new standards are appearing, it is expected that
the influence of standards will increase.
42
6. DESIGN OF A FILE ENCRYPTION SYSTEM
USING HASH FUNCTIONS
The Design of the System is based on the principle of generating a fixed
length key based on a variable length primary key. This secondary key will be
used to encrypt data and is transported along with the data (typically the file which
it has encrypted).
On the decryption front, the system collects the password from the user and
applies the same method it has used to generate the secondary key from the
password supplied by the user. On confirmation of the keys it proceed to decrypt
the data by applying the same key to it. In case of any inconsistency in passwords
or keys it gives an alert and proceeds for the next file in the list.
Help system is integrated into the system. Entire help system is
implemented as a single .txt file which will be loaded by the integrated help
system as and when necessary.
The following diagrams explain the working of various modules of the system :
43
6.1 Block Diagrams:
Plain Text
PK
Primary Key of
Variable Length
A Set of Descrete
Mathematical
Functions
F(0) = a+b+c+d+……
F(1) = a-b-c-d-e-……
SK
Secondary Key of
Fixed Length
F(2)= a+b-c+d-e…….
….……
……….
Cipher Text
Cipher Text
With
embedded
secondary key
Block Diagram of the Encryption System
44
A Set of Descrete
Mathematical
Functions
USER
F(0) = a+b+c+d+……
Password of variable
length vl
F(1) = a-b-c-d-e-……
F(2)= a+b-c+d-e…….
….……
………..
Key of Fixed Length fl
Based on
[ f(0)……f(16) ]
Generation of fixed length secondary key from a variable length primary key
45
Plain Text (pt)
ABCDEFGH…
Sk
Key Generated using
f(0) - f(15)
Cipher Text (ct)
f(0)a = A+m
f(1)b= B+n
f(2)c=C+o
f(3)d=D+p
………….
…………..
The Encryption Engine
46
Cipher Text (ct)
Get
Password
Generate
Key
Compare the Keys
Apply
Key
Plain Text (pt)
The Decryption Engine
47
6.2 Flow Charts:
START
x
option =0
Display Menu
Read option
from Menu
Is option
=1
A
View Files
y
n
Encrypt Files
Is option
=2
B
y
n
Decrypt Files
Is option
=3
C
y
n
Display Help
Is option
=4
D
y
n
STOP
Main Module
48
B
Read path and
type of files
Prepare list of files
along with complete
path
N=no of files
I=0, confirm =’N’
Display list of files
To be encrypted
Read confirm
from user
n
Is confirm = ‘y’
X
Read Password
pwd ,
confirmation
cppwd
Print “Error!
Passwords do
not match”
Is pwd=cpwd
n
Open file(I)
I=I+1
Encrypt file(I)
Encryption
Module
y
Is I<=n
n
Print ‘All Done’
x
49
C
Read path and
type of files
Decryption
Module
Prepare list of files along
with complete path
N=no of files
I=0, confirm =’N’
Display list of files
To be decrypted
Read confirm
from user
n
Is confirm = ‘y’
X
Open file(I)
I=I+1
Print ‘Error’
Read Signature
from file(I)
n
Is signature
=’ENC’
y
Decrypt file(I)
y
Is I<=n
n
Print ‘All Done’
x
50
A
Read path
and type of
files
View Files
Module
Print “Invalid
Path! Re enter”
Is path valid
?
n
Prepare list of File
Names
Display a bouncing
bar menu of file
names from the list
Read the name of
the selected file
from menu
Open selected file in
textmode for
reading
L
Read first 1500 bytes
from file & display
them on screen
Read user
response ur
Read Next
1500 bytes
Is ur= ‘pgdwn’
y
Is ur= ‘pgup’
y
Read
Previous
1500 bytes
Rewind file &
read first 1500
bytes
Is ur= ‘home’
y
Is ur= ‘end’
y
Is ur= ‘esc’
Goto EOF
and read
previous 1500
bytes
Print “Error!”
y
X
Close all files
51
Help Module
D
Open help file
for reading
Read Path
Is opt = ‘y’ ?
n
Read option opt
Display “Error! Unable
to Open File. Do you
wish to specify Path?”
Is file
Existing ?
y
Is file Ok for
Reading ?
Display “Error! Unable
Read from File”
y
L
X
52
7. IMPLEMENTATION OF THE SYSTEM
7.1 Description of Each Module
Keeping the various performance and operational constraints of the
proposed system in mind, it has been decided to use ‘c’ as the language to be used
to develop the system. After considering all the facets in the design of the system it
has been implemented in the form of the following modules:
1. Splash screen
2. Main menu
3. View files dialog
4. Encrypt files module
5. Decrypt files module
6. Get password module
7. Generate key module
8. View file list module
9. Read contents of file
Splash screen :
Used to display a welcome message along with an option either to enter or
quit the application.
Main Menu :
The bouncing bar menu that is used to get the input choice from user (viz
view / encrypt / decrypt files or help )
53
View files dialog :
Gets the path and type of file(s) to be viewed from the user. Checks for the
validity of the path and types of files as entered by the user and displays an error
message in case of incorrect path and also prompts for any changes as necessary.
Encrypt files :
Gets the path and type files to be encrypted. Checks for the validity of the
path and file names. Displays an error message in case any error. Displays the list
of the files to be encrypted and asks for the confirmation of the user.
Prompts for the password and also the confirmation password. Applies the
password to generate the key. Encrypts the files in the given list one after another
by applying the key. Time stamps the key in the encrypted file.
Decrypt Files :
Gets the path and type files to be decrypted. Checks for the validity of the
path and file names. Displays an error message in case any error. Displays the list
of the files to be decrypted and asks for the confirmation of the user.
Prompts for the password. Applies the password to generate the key.
Compares the key with the time stamped key found in the Encrypted file. If
they are the same decrypts the file by applying the key. Otherwise displays an
error message and proceeds to the next file. This process continues until the last
file in the list is finished. Displays a message regarding the outcome of the
operation.
54
Get Password :
Prompts the user for a password. Accepts the characters ( including
alphabets, numbers and special characters ) but suppresses the screen output with
asterisks. Also asks for a confirmation password. Checks both the passwords and
any inconsistency will result in an error message followed by the repetition of the
whole process.
Generate key :
Generates a key of fixed length (16) taking the given password as the basis
any by applying the 16 different discrete mathematical functions for the elements
of the key.
View the file list :
Prepares the list of files along with their complete path according to the
path and file types given by user. Rearranges the list by truncating the names of
any lengthy file names. Displays the list in the form of a menu and prompts the
user for selection. Upon selection returns the name and path of the file to the
calling portion of the program.
Read Contents of file :
Accepts the name along with the path of the file. Check for the validity of
its existence. Opens the file if exists for reading. Displays the contents of the file in
a page wise fashion. User can use the page navigation keys like pgup, pgdwn,
home and end. In case of non-availability of the file displays an error message and
prompts the user to reenter the file name with complete path.
55
7.2 Sample Code :
Cryptit.c
// Implementation of Secure Hash Fuctions for File
// Encryption and Decryption
#include<stdio.h>
#include<conio.h>
#include <dir.h>
#include<ctype.h>
#include<shapes.h>
// This is my own header file where definitions for many draw functions
// such as fillarea(),drawwindow() are present.
#include<password.h>
// This is where definition for getpassword() is there
#include<welcmscr.h>
// Definition of dispwelcome() is here
#include<mymenu.h>
// Definition of menu()
#include<filedets.h>
// Definition of showfile()
#include<encrypt.h>
// Definition of encrypt()
#include<decrypt.h>
#include<dos.h>
#include<time.h>
#include <fcntl.h>
#include <io.h>
#include<stdlib.h>
#include<filelist.h>
#include<viewfile.h>
void main()
{
int choice;
char* itmlist[]={" View Files ", " Encrypt Files "," Decrypt Files " ," About
Project "," Exit "};
strcpy(dirpath,"");
strcpy(temppath,"");
strcpy(tpath,"");
strcpy(tfile,"");
56
strcpy(tempfname,"");
dispwelcome();
do
{
choice=menu(31,8,5,itmlist);
switch(choice)
{
case(0):
viewfiles();break;
case(1):
encrypt();break;
case(2):
decrypt(); break;
case(3):
showfile("aboutprj.txt");break;
case(4):
break;
}
}while(choice<4);
dispwelcome();
getch();
textcolor(LIGHTGRAY);
textbackground(BLACK);
system("del *.tmp");
clrscr();
_setcursortype(_NORMALCURSOR);
} // end of main.
////////////////////////////////////////////////////////
57
viewfile.h
int islastfile;
int txtclr,bkclr;
int lastfileno=0,curfileno=0;
int firstfileinpage=0,lastfileinpage=0,i,j;
int lft,top,rgt,btm,row,col;
struct ffblk ffblk;
char fname[40]="",temp[40]="";
char ch,firstfile[20]="",lastfile[20]="";
void viewfiles()
{
char fstring[80];
void dispfiles();
void highnext();
void highprev();
void highright();
void highleft();
lft=3,top=2,rgt=75,btm=21;
strcpy(fstring,"");
strcpy(fname,"");
strcpy(firstfile,"");
strcpy(lastfile,"");
strcpy(temp,"");
txtclr=BLUE;bkclr=LIGHTGRAY;
clrscr();
drawwindow(5,7,75,12," Get Files to View ",BLACK,LIGHTGRAY);
textcolor(LIGHTRED);
textbackground(BLUE);
singlebox(17,1,61,3);
gotoxy(20,2);
textcolor(LIGHTGREEN);
textbackground(BLUE);
cputs("Implementation of Secure Hash Functions");
gotoxy(8,9);
textcolor(RED);
textbackground(LIGHTGRAY);
58
cputs("Enter File(s) to View : ");
textbackground(BLUE);
textcolor(LIGHTMAGENTA);
singlebox(2,15,78,23);
gotoxy(14,15); cprintf(" Important ");
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(5,17);
cprintf("Long File Names like ""C:\\Program Files\\My projects\\..."" are not
recognised!\n");
gotoxy(5,18);
cprintf("Please use files names like ""C:\\Progra~1\\Myproj~1\\...""\n");
gotoxy(5,20);
cprintf("You can use DOS Wild cards * and ?");
gotoxy(5,21);
cprintf("Example : c:\\abc\\*.*
or c:\\abc\\???.c etc..");
textcolor(BLUE);
textbackground(LIGHTGRAY);
gotoxy(33,9);
cputs("
");
gotoxy(33,9);
fflush(stdin);
if(strcmp(dirpath,"")!=0)
{
gotoxy(33,9);
cputs(temppath);
if(getch()==13)
{
strcpy(dirpath,temppath);
}
else
{
gotoxy(33,9);
cputs("
");
gotoxy(33,9);
gets(dirpath);
strcpy(temppath,dirpath);
}
}
59
else
{
gotoxy(33,9);
gets(dirpath);
strcpy(temppath,dirpath);
}
islastfile = findfirst(dirpath,&ffblk,0);
if(islastfile!=0)
{
alert2();
gotoxy(15,11);
textbackground(LIGHTGRAY);
textcolor(RED+BLINK);
cputs(" Incorrect Path or Filename ! Strike a key.");
getch();
return;
}
do
{
strcpy(fstring,dirpath);
strcpy(fname,"");
strcpy(firstfile,"");
strcpy(lastfile,"");
strcpy(temp,"");
lft=4;top=3;rgt=76;btm=21;
txtclr=BLACK;bkclr=LIGHTGRAY;
clrscr();
textcolor(BLUE);
textbackground(BLUE);
fillarea(0,0,79,23,1);
drawwindow(lft,top,rgt,btm,dirpath,BLACK,LIGHTGRAY);
textcolor(YELLOW);
textbackground(BLUE);
gotoxy(11,24);
cprintf("Use %c %c %c %c to Move Bar and Press %c%c%c to Select Esc to
Cancel",24,25,26,27,17,196,217);
60
islastfile = findfirst(dirpath,&ffblk,0);
if(!islastfile)
lastfileno++;
strcpy(firstfile,ffblk.ff_name);
while(!islastfile)
{
islastfile=findnext(&ffblk);
strcpy(lastfile,ffblk.ff_name);
lastfileno++;
}
islastfile = findfirst(dirpath,&ffblk,0);
dispfiles();
col=lft+6; row=top+2;
highnext();
_setcursortype(_NOCURSOR);
do
{
ch=getch();
switch(ch)
{
case(80):
highnext();break;
case(72):
highprev();break;
case(77):
highright();break;
case(75):
highleft();break;
case(27):
break;
}
}while(ch !=13 && ch!= 27);
_setcursortype(_SOLIDCURSOR);
for(i=strlen(fstring);fstring[i]!='\\';i--);
fstring[i++]='\\';
fstring[i++]='\0';
strcat(fstring,temp);
if(strcmp(fstring,"")!=0 && ch!=27)
61
{
showfile(fstring);
}
}while(ch!=27);
return;
} // end of viewfiles()
/////////////////////////////////////////////////////////////
void dispfiles()
{
col=lft+6; row=top+2;
lastfileinpage=curfileno;
firstfileinpage=curfileno;
fillarea(col,row,rgt-2,btm-2,LIGHTGRAY);
while(!islastfile && (col+4) < rgt)
{
gotoxy(col,row);
textcolor(txtclr); textbackground(bkclr);
cputs(ffblk.ff_name);
row++;
if(row > (btm-2))
{
row=top+2;
col+=16;
}
islastfile=findnext(&ffblk);
}
} // end Dispfiles
///////////////////////////////////////////////////
void highnext()
{
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
62
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0' ;i+=2)
{
if(fname[i] > 32 && fname[i] < 127)
{
temp[j]=fname[i];
j++;
}
}
temp[j] = '\0';
if(strcmp(temp,lastfile)==0)
{
alert3();
return;
}
else
{
curfileno++;
}
textcolor(txtclr);textbackground(bkclr);
gotoxy(col,row);
cputs(temp);
if(ch==80)
{
row++;
}
if(row > (btm-2))
{
col+=16;
row=top+2;
if((col+13) > rgt)
{
dispfiles();
row=top+2;
col=lft+6;
}
}
else
{
row=row;
col=col;
63
}
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0';i+=2)
{
if(fname[i] > 32 && fname[i] <127)
{
temp[j]=fname[i];
j++;
}
}
temp[j]='\0';
gotoxy(col,row);
textcolor(bkclr);textbackground(txtclr);
cputs(temp);
return;
}// end of highnext()
///////////////////////////////////////////////////
void highprev()
{
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0' ;i+=2)
{
if(fname[i] > 32 && fname[i] < 127)
{
temp[j]=fname[i];
j++;
}
}
temp[j] = '\0';
if(strcmp(temp,firstfile)==0)
{
64
alert3();
return;
}
else
{
curfileno--;
}
textcolor(txtclr);textbackground(bkclr);
gotoxy(col,row);
cputs(temp);
if(ch==72)
{
row--;
}
if(row < (top+2))
{
col-=16;
row=btm-2;
if(col < lft+6)
{
lastfileinpage=curfileno;
firstfileinpage=lastfileinpage-60+1;
islastfile = findfirst(dirpath,&ffblk,0);
for(i=0;i<curfileno-60;i++)
{
islastfile=findnext(&ffblk);
}
dispfiles();
row=btm-2;
col=rgt-18;
}
}
else
{
row=row;
col=col;
}
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
strcpy(temp,"");
65
for(i=0,j=0;fname[i]!='\0';i+=2)
{
if(fname[i] > 32 && fname[i] <127)
{
temp[j]=fname[i];
j++;
}
}
temp[j]='\0';
gotoxy(col,row);
textcolor(bkclr);textbackground(txtclr);
cputs(temp);
return;
}// End Highprev
/////////////////////////////////////////////////////////////
void highright()
{
strcpy(fname,""); /// first check whether there is another column ?
gettext(col+16,row,col+28,row,fname);
for(i=0,j=0;fname[i]!='\0' ;i+=2)
{
if(fname[i] > 32 && fname[i] < 127)
{
temp[j]=fname[i];
j++;
}
}
temp[j] = '\0';
if(strcmp(temp,"")==0)
{
alert3();
return; /// if not don't do any thing
}
// else proceed
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
66
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0' ;i+=2)
{
if(fname[i] > 32 && fname[i] < 127)
{
temp[j]=fname[i];
j++;
}
}
temp[j] = '\0';
if(col>rgt-21)
{
alert3();
return;
}
else
{
textcolor(txtclr);textbackground(bkclr);
gotoxy(col,row);
cputs(temp);
curfileno+=15;
col+=16;
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0';i+=2)
{
if(fname[i] > 32 && fname[i] <127)
{
temp[j]=fname[i];
j++;
}
}
temp[j]='\0';
gotoxy(col,row);
textcolor(bkclr);textbackground(txtclr);
cputs(temp);
}
return;
}// end of highright()
//////////////////////////////////////////////////////
void highleft()
{
gotoxy(col,row);
67
gettext(col,row,col+12,row,fname);
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0' ;i+=2)
{
if(fname[i] > 32 && fname[i] < 127)
{
temp[j]=fname[i];
j++;
}
}
temp[j] = '\0';
if(col<lft+10)
{
alert3();
return;
}
else
{
textcolor(txtclr);textbackground(bkclr);
gotoxy(col,row);
cputs(temp);
curfileno-=15;
col-=16;
gotoxy(col,row);
gettext(col,row,col+12,row,fname);
strcpy(temp,"");
for(i=0,j=0;fname[i]!='\0';i+=2)
{
if(fname[i] > 32 && fname[i] <127)
{
temp[j]=fname[i];
j++;
}
}
temp[j]='\0';
gotoxy(col,row);
textcolor(bkclr);textbackground(txtclr);
cputs(temp);
return;
}
}// end of highleft()
68
password.h
// Password.h has definitions for two functions
char* getpassword(int col, int row);
char* encpwd(char* password);
char* getpassword(int col, int row)
{
int i=0,pcol=col;
char ch,pwd[40]="";
strcpy(pwd,"");
fflush(stdin);
gotoxy(col,row);
//do1
do
{
fflush(stdin);
ch=getch();
if(pcol >= col && pcol <= col+32)
{
gotoxy(pcol,row);
if((ch>= 65 && ch<=90)||(ch>=97 && ch<=122) || (ch>=48 &&
ch<=57)) // printable character
{
pwd[i]=ch;
cprintf("*");
i++;
++pcol;
} //endif
else
{
switch(ch)
{
case(8): //back space
{
if(i>0 && pcol >col)
{
pcol--;
gotoxy(pcol,row);
cprintf(" ");
gotoxy(pcol-1,row);
69
i--;
pwd[i]='\0';
}//endif
break;
}//end case
case(27):
//Esc
strcpy(pwd,"");
return(pwd);
case(13):
//enter
break;
default:
{
alert1();
if(pcol>col && i>0)
{
pcol--;
i--;
pwd[i]='\0';
}
break;
}//end default
} //endswitch
} //endelse
} //if1
else
{
pcol=pcol>=(col+32)?(col+32):col;
i=i>32?32:0;
gotoxy(pcol,row);
cprintf(" ");
}
}while(ch!=13); //enddo2
pwd[i]='\0';
return(pwd);
}
char* encpwd(char* password)
{
char pwd[100]="", encpwd[50]="";
unsigned int i=0,a=70,b=70,c=70,d=70,e=70,f=70,g=70,h=70;
strcpy(pwd,password);
strcpy(encpwd,"");
70
i=0;
while(i<strlen(pwd))
{
a+=pwd[i];
i++;
a-=pwd[i];
i++;
}
a=abs(a);
a=a%255;
b=pwd[0];
i=1;
while(i<strlen(pwd))
{
b+=pwd[i];
i++;
b-=pwd[i];
i++;
}
b=abs(b);
b=b%255;
strrev(pwd);
i=0;
while(i<strlen(pwd))
{
c+=pwd[i];
i++;
c-=pwd[i];
i++;
}
c=abs(c);
c=c%255;
d=pwd[0];
i=1;
while(i<strlen(pwd))
{
d+=pwd[i];
i++;
d-=pwd[i];
i++;
}
d=abs(d);
71
d=d%255;
strrev(pwd);
e=pwd[0];
i=1;
while(i<strlen(pwd))
{
e+=pwd[i];
i++;
e+=pwd[i];
i++;
e-=pwd[i];
i++;
}
e=abs(e);
e=e%255;
f=pwd[0];
i=1;
while(i<strlen(pwd))
{
f-=pwd[i];
i++;
f-=pwd[i];
i++;
f+=pwd[i];
i++;
}
f=abs(f);
f=f%255;
strrev(pwd);
g=pwd[0];
i=1;
while(i<strlen(pwd))
{
g+=pwd[i];
i++;
g+=pwd[i];
i++;
g-=pwd[i];
i++;
}
g=abs(g);
72
g=g%255;
h=pwd[0];
i=1;
while(i<strlen(pwd))
{
h-=pwd[i];
i++;
h-=pwd[i];
i++;
h+=pwd[i];
i++;
}
h=abs(h);
h=h%255;
encpwd[0]=(char)a;
encpwd[1]=(char)b;
encpwd[2]=(char)c;
encpwd[3]=(char)d;
encpwd[4]=(char)e;
encpwd[5]=(char)f;
encpwd[6]=(char)g;
encpwd[7]=(char)h;
encpwd[8]='\0';
return(encpwd);
}
73
filelist.h
int dispfilelist(char* dirpath);
int dispfilelist(char *dpath)
{
int lastfile,row = 6,col=9,i;
lastfile = findfirst(dpath,&ffblk,0);
while (!lastfile)
{
gotoxy(col,row);
textcolor(BLUE);
textbackground(LIGHTGRAY);
cprintf("%s", ffblk.ff_name);
row++;
if(row>17)
{
row= 6;
col+=16;
}
if(col>60)
{
gotoxy(1,22);
textbackground(BLUE);
clreol();
gotoxy(14,22);
textcolor(YELLOW);
textbackground(BLUE);
cprintf("More files! Press Space bar to Continue. Esc to Cancel.");
if(getch()==27)
{
return(1);
}
col=9;
row=6;
for(i=row;i<19;i++)
{
gotoxy(col,i);
textbackground(LIGHTGRAY);
74
cprintf("
");
}
}
lastfile = findnext(&ffblk);
}// end while
return(0);
} // end Dispfilelist
75
8.OUTPUT SCREENS
Fig 1 Splash Screen
Fig 2 Main Menu
76
Fig 3 View Files Dialog
77
Fig 4 Encrypt Files Dialog
78
79
Fig 5 Decrypt Files Dialog
80
81
9. CONCLUSIONS AND SCOPE FOR FURTHER
STUDY
The whole system demonstrates the use of Hash Functions in the
development of a file encryption application. The techniques we have used to
develop this application can be as well used to develop a stream based encryption
system.
To test the application, its underlying algorithm and its efficiency, a
separate directory has been created and files of different types (viz. .exe, .com, .txt,
.dbf, etc.) were copied into it. All these files were encrypted using the same
password of length ‘l’ and the time taken to do the job was recorded. As the value
of ‘l’ increased the time taken to encrypt them also increased. However, this
increase was quite marginal and proves the efficiency of the algorithm.
It did well as far as the performance part is concerned even with lengthy
keys. To stretch the limits of the application further, a couple of audio files (each
about 4 MB in size) and one video file (around 20 MB in size) were given for
encryption and just under 20 seconds the job was done. Decryption was also
equally fast.
Since it depends on a set of complex functions and a multistage key
generation phase the algorithm is pretty strong and can withstand even powerful
brute force attacks.
All these properties of the application prove that it has
successfully implemented all the features we envisaged in its design phase.
The Algorithm used in this system generates a 16 character secondary key
based on a password of variable length. The maximum length of the password can
be 32 characters. In future developments the length of this password can be
increased to 64 or 128 to make the key more complex.
82
The system expects the file name with extension and along with its
complete path. Directory traversal is not provided to the user. In future
improvements, these facilities can be incorporated into the system.
The Encryption and Decryption engines of the system do not make use of
the block cipher techniques to improve the overall efficiency and speed of the
system. No improvement in the speed of the system can be noticed with files of
ordinary size. However when a file of extremely large size like a video data file or
an audio file is encrypted, the block cipher technique will certainly increase the
speed of the operations. Future versions of the application may include this
technique and give the user an option to opt for it.
The application demonstrates the use of a moderately complex set of Hash
Functions for data encryption. The future releases of the application may use a
more complex hybrid cipher basing on the techniques demonstrated by this
algorithm.
For the sake of speed and efficiency the system has been designed to work
in the command prompt level. It leads to serious set backs in the matters of overall
system look an feel and ease of operation. A more decent look and easy of use can
be given to the interface, if it is developed to work in a GUI environment like the
Windows. For this, the demonstrated cipher can be used in a windows based
application developed using VB or VC++.
83
10. BIBLIOGRAPHY
Hand Book of Cryptography
Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone
CRC Press
Cryptography Theory and Practice
Douglas .R. Stinson
March, 1995, by CRC Press, Inc
THE CODE BOOK.
The Secret History of Codes and Code-Breaking
Fourth Estate Publications.UK.
Applied Cryptography: Protocols, Algorithms, and Source Code in C, 2nd Edition
Bruce Schneier
1999 John Wiley & Sons
Implementing Elliptic Curve Cryptography
Michael Rosing
1998, Manning Publications Company
Cryptography and E-Commerce: A Wiley Tech Brief
Jon C. Graff
2000 John Wiley & Sons
84
11. REFERENCES
http://www.verisign.com/docs/pk_intro.html
www.ssh.fi/tech/crypto/intro.html
developer.netscape.com/docs/manuals/security/pkin/
www.pgpi.org/doc/guide/6.5/en/intro/
www.cryptography.com/resources/whitepapers/DES.html
www.rsasecurity.com/rsalabs/faq/
sunsite.bilkent.edu.tr/pub/security/cryptography/DES/
raphael.math.uic.edu/~jeremy/crypt/des.html
www.dotnet247.com/247reference/System/ Security/Cryptography/DES.aspx
pajhome.org.uk/crypt/rsa/rsa.html
www.emory.edu/BUSINESS/gds.html
www.perkinscoie.com/resource/ecomm/digsig/digsig.htm
csrc.nist.gov/encryption/tkdigsigs.html
www.eff.org/Privacy/Digital_signature/
www.andrew.cmu.edu/~abender/crypto/crypto.html
www.isaac.cs.berkeley.edu/
theory.lcs.mit.edu/~rivest/crypto-security.html
85
Download