Software Patents - Obstacles To Software Development
Software Patents - Obstacles To Software Development
Software Patents - Obstacles To Software Development
Richard Stallman
Copyrights dont cover ideas (they cover the expression of a work), parents do.
Copyrights can last as long as 150 years. Patents only last 20 years.
During the 18 months a patent may take to process application is secret. Eg in 1984 the compress
program was written, then in 1985 a patent for LZW compression was released.
Patents are unclear and may use unusual terminology so you might not find the required patents
when you write.
The Australian government studied the patent system in the 1980's, it concluded that aside from
international pressure there was no reason to have a patent system.
Eg; the authors of XyWrite downgraded their software to take out the facility to pre-define
abbreviations.
BT holds a patent on using hyperlinks with dial up access, public key encryption was protected until
1997.
If you are a big company you can trade patents, avoiding the problem of the patenting system.
If you are a small vendor and you threaten them with a patent, they will just claim your patent
infringes their patents. Suckers.
The complexity of software outranks that of eg car parts considerably, so a company has to be rich
(and able to deal with patents) to build a 100,000 piece car but doesn't have to be to deal with a
100,000 piece of software.
Introduction to Security
Unconditional security: Not enough information to decide whether one plain text possibility is
more likely than another.
Electronic code book: Split into n-bit blocks, apply cipher function to each individually. Its crap.
CBC: Use output of each block as part of input for next block O(the first input is random data)
MAC is like CBC put the block each time isn't outputted-you just get the final output (and the first
input is plaint text). It is useful as a secure checksum.
A Fesitel cypher is a block cypher structure that includes muliple rounds of encryption.
Split the plaintext block into two equal pieces, (L0, R0)
where f is the round function and Ki is the sub-key.Then the ciphertext is (Ln, Rn).
One advantage of this model is that the round function f used does not have to be invertible, and
can be very complex. Note the reversal of the subkey order for decryption; this is the only
difference between encryption and decryption:
Three rounds are required. After one, the left half appears unmodified. After two, a single bit
change in the right half of P causes just a single bit-change in the right half of C.
● Alice and Bob both select a suitably large prime number p, a base g (greater than 1, less than
p-1), and each a random integer (from 1 to p-2) x and y respectively
ElGamal signature
If A has published (p,g,gx) as her public key and kept x as her private key, then in order to sign a
message M she generates a random number y and solves the linear equation
x . gy + y . s = M (mod p) (1)
for s and sends to the verifier B the signed message
Public-key infrastructure
Public key encryption and signature algorithms allow the establishment of confidential and
authenticated communication links with the owners of public/private key pairs.
In the absence of a personal exchange of keys, this can be mediated via a trusted third party. Such
a certification authority C issues a digitally signed public key certificate
We can use the operator o to describe the extraction of A's public key KA from a certificate CertC(A)
with the certification authority publickey KC:
KC o CertC(A) = { KA if certificate valid, failure otherwise }
Some techniques to ensure security involve CTRL+ALT+DEL to close any GUI applications when
logging in, passwords are stored hashed, don't use dictionary passwords, ensure minimum length
and randomly generate.
Authentication Protocols
B -> A Kab
Problems: Eavesdropper can capture secret and replat it. A can't confirm identity of B.
Simple challenge response:
A-> B N
B-> A h(Kab|N)
A->B Na
B->A {Na,Nk}K ab
A->B Nb
Each smart card Ai contains its serial number i and its card key Ki = {i}K. The master key K (key
generating key) is only stored in the verifiation device B. Example with simple challenge response:
Ai -> B i
B ->Ai N
Ai -> B h(Ki|N)
Kerberos
User A and server B do'nt share a secret key initially, but authentication server S shares secret
A-> B Na
A -> B Nb
Impersonation of B by B', who intercepts all messages to B and starts a new session to A
simultaneously to have A decrypt her own challenge.
A->B': Na
B'->A Na
A->B' {Na,N'a} K ab
B'->A {Na,Nb = N'a}K ab
A->B' Nb
S = set of subjects
O = set of objects
Elevated Rights
Many programs need access rights to files beyond those of the user, eg passwd
Unix files carry two additional permission bits for this purpose:
A normal process started by user U will have the same value U stored as the effective, real and
saved user Id and cannot change any of them.
When a program file owned by user O and with the set user ID bit set is started by user U, then
both the effective and the saved user ID of the process will be set to O, whereas the real user ID
will be set to U.
The program can now switch the effective user ID between U and O. Similarly with the group ID.
If a malicious user can crash a program that is running as root, they can often end up on the shell
with root privileges.
Unlike chmod where the user controls access, system policies enforce MAC. MAC mechanisms are
aimed at preventing untrusted application software.
Bell Model
Formal policy for mandatory access in a military environment. All subjects are labeled with a
confidentiality level, eg
A process that reads Top Secret becomes tagged as Top Secret by the OS, as will all files it writes
into afterwards.
Eg if high level process has already created file F, a low level process will fail when trying to create
a file of same name -> 1 bit information
The trusted computing base are the parts of a system that enforce a security policy.
A good security design should attempt to make the TCB as small as possible.
If you don't check for the size of data in you're program its vulnerable to the return address being
overwritten etc.
Similarly, input data should be checked in CGI scripts for malicious shell code.