Homework solution for

CIS729.7: Cryptography

Dr. Dexter

By Sun Qing

2002.12.13

 

Qn1

[On PKI vs. Kerberos]  Both PKI and Kerberos offer the potential of "single sign-on" authentication. Describe the infrastructure requirements for single sign-on for both technologies, assuming each is being implemented on a smallish intranet. Then describe any additional requirements for making each technology a truly "global" (or at least very-wide-spread) infrastructure. What are the main challenges in each case? Can you make a final determination about which seems more likely to be used as a "global" infrastructure?

Solution

First of all, I found two definitions on the SSO. The first one is, single sign-on user can use many applications; the 2nd one is, like MSN is doing, storing all sensitive information on a centralized server, one can use one single username/password pair to retrieve all for web business; the benefit is, one can limit the time to input information, which makes the e-commercial more secure.

PKI and KERBEROS are both good to for the SSO definition 1. PKI use CA to proof one’s identity. In SSO, any application can verify one user’s certificate by questing the CA’s. In Kerberos, one user first gets TGT from AS and TGS can give user ticket for the specific application to let user enter the application when user use his TGT to request so. In both schemes, we can see, if used in a small-ish intranet, they are almost the same. We need only one CA or TGS/AS. There’s no need to use sibling CA’s.

But if going global, by PKI we can have many CA’s to grant access to applications. In Kerberos, there seems to be nothing similar to this mechanism. PKI is more fitful for a big network.

 

 

Qn2

[On Hash Functions]  We (briefly) discussed some of the desirable characteristics of cryptographic hash functions, including "strong collision resistance."

a.      Discuss whether or not this is a desirable characteristic for hash functions in general (i.e. non-cryptographic applications). Explain why or why not.

b.      What sort of attack could be mounted against a hash function (in a cryptographic application) that didn't have strong collision resistance?

Solution

 

a)      It may not be a desirable characteristic for hash functions in general. In some of the cases, Hash function is mainly to compress the searching space. In those applications, we don’t expect it with a good collision resistance property; instead we care the efficiency of the compression and the ease of computation. For example, in data structure, the hash table can always use hash function to facilitate the searching of data. In this situation we just want the data can be evenly placed into each slot. We need not security here, so, need no collision resistance.

b)      We can have the chosen-text attack mounted if the hash function doesn’t have strong collision resistance.

The more efficient attack can be the birthday attack. This attack is based on the Birthday Paradox. Suppose that the number of bits in the digest is n. Any message M can be represented (written) in many different ways (e.g., by adding blanks and empty lines, using equivalent words, abbreviations, and full wording, or removing some words whose existence is not essential). Attacker generates r1 variants of an original message and r2 variants of a bogus message. The probability of finding a pair of variants (one of the genuine and one of the bogus message) which hash to the same digest is

where r2>>1. When r1 = r2 = 2n/2, the above probability is about 0.63. Therefore, any hashing algorithm which produces digests of the length about 64 bits is insecure as the time complexity function for the corresponding birthday attack is about 223.

From this we can see, the strong collision resistance is required against birthday attacks.

 

 

 

Qn3

[On Secure Code Technologies] Read this report on .NET security, and then write a couple paragraphs on whether .NET or Java security is better designed to deal with the security challenges of "run anywhere" code. (Your response will almost certainly be too simplistic -- I don't want you to write TOO much -- but that's OK. (You might also want to skim the article on user authentication in Java so have a fuller sense of its security architecture).

Solution

 

.Net and Java all provide some security mechanism. In different fields, they have different performance. It’s impossible to say which one is better in general.

The main languages of these two platforms C# and Java look very similar. They all remove pointer and use garbage collection. In language level, we can say they are tie. .Net and Java both provide evidence-based security or the akin. .Net seems better than Java, because .Net is highly integrated into Windows system. It can use system information to help to make a decision. As for code access security, .Net is also better than Java. At least the .Net’s code verification is stronger than Java by default.

Because Java has no JIT compiling option, we can not compare the verification process security .Net has. But Java security manager does make the verification process when it executes a Java program.

To role-based security, Java is trusted better than .Net. JAAS provides more scalability and modifiability. JAAS is available for Java developers to modify and then plug in pluggable authentication modules, it provides rich customization, making Java's authentication preferable to .NET's. Java is also proved better than .Net for secure communication. .NET developers will need to use IIS for communication protection—and that doesn't bode well for the platform's communication security, since IIS might be the most attacked server in the world.

The last thing is, .Net is running mainly under Windows, which is much less secure and stable than UNIX. For a common server usage, Java+UNIX can be much better than .Net+Windows.