암호학(cryptography)은 나에게 있어 여러가지 면에서 중요한 의미를 지닌다. 암호학과 나의 인연의 시작은 아마 내가 고등학생때 봤던 SEED 암호화 문서가 아닐까 한다. SEED는 1999년 한국인터넷진흥원과 국내 암호 전문가들이 개발한 128비트 블럭 암호화 알고리즘이다1. 2009년에는 256비트 키를 지원하는 SEED 256도 개발 되었다.

고등학생때 읽었던 SEED 문서는 아직도 고이 간직하고 있다. 그것도 파일이 아닌 인쇄해놓은 문서 말이다. 파일은 Spotlight에서 검색이 안 되는걸 보니 아마 백업 아카이브 어딘가에 숨어있는게 아닐까 한다. 사실 그때는 문서를 여러번 읽어봐도 내가 이해할 수 있는 내용은 반의 반도 되지 않았었다. 내가 가진 수학적 배경 지식의 수준이 형편 없었으니 어쩔 수 없는 일이다. 지금 다시 보면 조금 더 많이 이해할 수 있을것 같긴 하지만. SEED는 RFC 문서로도 등록 되어있는데 (RFC 4269), 관심 있는 사람들은 한번쯤 읽어보는것도 괜찮을것 같다.

대학교 학부생 시절 마지막 학기때 들었던 암호학 수업도 기억에 남는다. 정말 많은 것을 배웠지만, 동시에 나의 지능 지수를 의심하게 만든 수업이기도 하다. 나의 자존감도 한 단계 낮춰주었다. 암호학 수업은 나에게 큰 깨달음을 주었는데, 대학 수업이 재밌어 보인다고 수강하면 안 된다는 것이다. 청강을 하는 것이 맞다.

수업에서 사용했던 책이 바로 Introduction to Cryptography라는 제목의 책인데, 내 침대 머리맡 책장에 잘 모셔놨다. 잠이 안 올 때 읽으면 효과가 바로 나타난다.2

보안 통신

(내가 봤던) 대부분의 암호학 문헌에서 자주 등장하는 인물이 둘 있다. 바로 앨리스(Alice)와 밥(Bob)이다. 앨리스가 밥에게 메세지를 보내는 것이 일반적인 시나리오다. 그리고 잠재적인 도청자인 제 3의 인물, 이브(Eve)도 등장한다.

앨리스가 밥에게 메시지를 보낼 때, 먼저 양측이 합의한 암호화 방식에 따라서 평문(plaintext)을 암호화 시킨다. 대부분의 경우에 이브는 앨리스와 밥이 어떤 암호화 방식을 사용하는지 알고 있다. 그럼에도 불구하고 이브가 메세지의 내용을 쉽게 알아낼 수 없는 이유는 바로 암호화 키(key)라는 것이 있기 때문인데, 키에 대해서는 잠시 후에 설명하겠다. 밥이 앨리스로부터 암호화된 메세지, 즉, 암호문(ciphertext)를 받으면 밥은 적절한 복호화 키를 가지고 그걸 다시 평문으로 변환한다.

악마같은 이브는 언제나 이 둘 사이에 끼어들고 싶어하는데, 이브의 주요 관심사는 다음과 같다.

  1. 메세지의 내용을 알아내기.
  2. 암호화 키를 알아내서 같은 키로 만들어진 모든 암호문을 해독하기.
  3. 앨리스가 보낸 메세지를 변조하기.
  4. 앨리스인척 하기.

보통 (1)이나 (2)를 소극적인 공격으로, (3)과 (4)를 적극적인 공격으로 분류한다.

암호학의 응용

암호학은 여러가지 목적으로 응용될 수 있는데, 큰 줄기로 분류하자면 다음의 네 가지의 응용 분야가 있다.

기밀 유지 (Confidentiality)

앨리스와 밥이 주고 받는 메세지의 내용은 제 3자(특히 이브)가 알아볼 수 없어야 한다. 앨리스와 밥이 어떤 방식으로 메세지를 암호화 하는지 제 3자가 알고 있어도 메세지의 기밀성이 유지되도록 하는 것이 현대 암호학의 기본이다. 이 글에서 다룰 암호화, 복호화에 관한 얘기는 바로 이 기밀 유지 기법이다.

데이터 무결성 보증 (Data Integrity)

메세지를 전송하는 과정이 항상 순탄하지만은 않다. 통신 장애로 인해서 메세지가 손상될 수도 있고, 못된 이브가 중간에서 장난을 칠 수도 있다. 메세지가 전송 과정 중에 손상되거나 변조되었을 경우 무결성이 손상되었다고 표현한다. 해시(hash) 함수를 비롯한 여러가지 데이터 무결성 보증 기술이 있는데, 기회가 되면 따로 포스팅을 해 보는것도 괜찮을것 같다.

인증 (Authentication)

밥은 앨리스한테서 온 메세지를 받기 원한다. 사용자 인증을 통해서 메세지를 보내는 사람이 이브가 아닌 앨리스 본인이라는 것을 증명할 수 있다. 비밀번호처럼 앨리스만 알고 있는 것이나 지문이나 홍채, 목소리처럼 앨리스만 가지고 있는 것을 가지고 사용자를 인증 하는 것이 보통이다.

부인 방지 (Non-repudiation)

앨리스가 메세지를 보내놓고 자신이 보내지 않았다고 우길 수 없게 만드는 기술이다. 전자상거래에서 특히 중요하게 사용되는데, 소비자가 물건을 구입해놓고 자신은 그런 거래를 승인한 적이 없다고 부인하지 못 하도록 만들 수 있기 때문이다.

암호화 알고리즘의 분류

현대적인 암호화 알고리즘은 크게 두 가지로 분류된다. 하나는 비밀키 암호화 방식이고, 다른 하나는 공개키 암호화 방식이다. 그 이외에도 고대와 중세 시대에 사용되었던 여러가지 암호화 방식이 있지만, 오늘날 암호학과 컴퓨팅 기술의 발전으로 인해 더이상 메세지의 기밀성을 보장할 수 없다. 이 글에서는 전통적인 암호 방식중 하나인 ROT-13, 기계식 암호의 대표격인 이니그마, 그리고 두 가지 현대적인 암호화 방식에 대해서 소개해보고자 한다.

ROT-13 암호화

ROT-13은 단순한 치환 암호(substitution cipher)의 일종으로 영어 알파벳을 13글자씩 밀어서 암호화 및 복호화를 하는 방식이다. 시저 암호(Caesar cipher)라고도 한다. AN이 되고, BO가 되는 식이다.

예를 들어서, 다음과 같은 평문이 있다고 할 때,

RUBBISH PHILOSOPHER

ROT-13 방식으로 암호화를 하면 다음과 같은 암호문을 얻을 수 있다.

EHOOVFU CUVYBFBCURE

ROT-13에서는 암호화 함수와 복호화 함수가 같다. 알파벳을 13글자씩 밀어서 암호화 하는 방식이고 영문 알파벳은 총 26개가 있으니 어찌 보면 당연한 이야기이다. 즉, ROT-13 암호화 함수를 $R_{13}$이라 할 때 다음의 관계가 성립한다고 볼 수 있다.

참고로 여기서 $\Sigma$는 모든 영문 알파벳을 포함하는 집합(set)을 의미한다.

이 사이트에 가면 ROT-13으로 직접 암호화, 복호화를 해볼 수 있다.

하지만 치환 암호 방식에는 치명적인 문제점이 있다. 암호화 키가 없다는 점이다. 어떤 방식으로 암호화를 했는지만 알면 누구든지 암호를 풀 수 있다. 잠시 후에 소개할 현대적인 암호화 방식에서는 암호를 푸는 열쇠인 ‘키’라는 개념이 있는데, 이 암호화 키가 없으면 암호화 방식을 알아도 암호를 풀 수 없다.

암호화 키가 없다는 것은 특정 평문을 암호화 했을 때 항상 똑같은 암호문이 나온다는 말과 일맥상통한다. 암호를 깨는 방법 중에 암호문에 등장하는 알파벳들의 등장 빈도수를 분석해서 원문을 추측하는 공격법이 있다. 예를 들어서 암호문에 R이 가장 많이 등장한다면 R에 대응되는 알파벳이 E라고 추측해볼 수 있는 것이다. 암호문이 충분히 길다면 현실성 있는 공격 기법이다.

영어에서 자주 등장하는 알파벳과 빈도는 다음과 같다.

Alphabet e t a o i n s h r
Frequency .127 .091 .082 .075 .070 .067 .063 .061 .060

이니그마(Enigma)

현대적인 컴퓨터가 개발 되기 전, 기계적인 암호화 방식도 개발되었었다. 대표적으로 이니그마(Enigma)라는 이름을 가진 기계가 있는데, 이는 세계 2차 대전 당시 독일군이 적군의 눈을 피해 비밀 통신을 하는데 사용됐었다. 선택적으로 전류를 흐르게 할 수 있는 여러개의 로터를 이용한 방식인데, 이 로터들의 처음 위치에 따라 전류가 흐르는 통로가 결정된다.

이니그마의 로터

이니그마의 암호를 깨려는 수 차례의 시도가 있었지만 모두 실패로 돌아갔었기에 이니그마는 한동안 매우 신뢰할만한 기계라고 여겨졌었다. 하지만 1930년대에 세 명의 폴란드 암호 전문가들이 초기의 이니그마 암호를 깨는데에 성공했다. 이 기술은 1939년, 독일이 폴란드를 침략하기 두 달 전에 영국 정부로 넘어갔다. 영국은 폴란드 전문가들의 기술을 개선하여 마침내 세계 2차 대전 기간 동안 독일군의 비밀 메세지들을 해독하는데 성공하게 된다.

이니그마의 암호가 깨졌다는 사실은 전쟁이 끝난 후에도 30여년간 비밀로 유지 되었었는데, 이는 자신들의 과거 식민지에 이니그마 기계를 팔아넘긴 영국 정부가 식민지 사람들이 이 사실을 알기를 원치 않았기 때문이다3. 진짜 못돼 쳐먹은 놈들이다.

비밀키 암호화

비밀키 암호화는 다른 말로 대칭키(symmetric key) 암호화 라고도 한다. 무슨 말이냐 하면 암호화를 할 때 사용하는 키와 복호화를 할 때 사용하는 키가 같다는 얘기다. 따라서 이 암호화 키가 제 3자에게 유출되는 순간 암호화의 무결성은 깨진다.

DES는 Data Encryption Standard의 약자로서 대표적인 비밀키(private key) 암호화 방식 중 하나이다. DES는 블럭 암호화 알고리즘인데, 메세지를 특정 크기의 블럭으로 나눠서 각 블럭을 독립적으로 암호화 하는 방식이다.

암호화 과정

블럭의 크기는 64비트이고, $L_0R_0$의 형식으로 나타낸다. 여기서 $L_0$은 블럭의 좌측 32비트를, $R_0$은 블럭의 우측 32비트를 나타낸다. 그리고 암호화 키 K는 56비트의 길이를 가진다.

i 번째 라운드에서 $K$로부터 파생된 48비트 키 $K_i$와 $L_{i-1}R_{i-1}$을 입력받아 $L_i R_i$를 계산한다. 암호화 프로세서의 주요 부분은 32비트 입력값 $R_{i-1}$과 48비트 입력값 $K_i$를 이용해서 32비트 출력값을 만드는 함수 $f(R_{i-1}, K_i)$이다.

i 번째 라운드의 결과값은 다음과 같다.

여기서 $\oplus$는 XOR 연산을 의미한다. 이 연산은 특정 회수만큼 반복 되는데, 여기서 특정 회수를 n 이라 하자. 이 연산을 n 번 반복해서 암호문 $L_n R_n$이 만들어진다.

복호화 과정

복호화는 지금까지 했던 연산들을 반대의 순서로 하면 된다. 암호화 과정을 통해 추론해보면 $L_n = R_{n-1}$ 그리고 $R_n = L_{n-1} \oplus f(L_{n-1}, K_n)$의 관계가 성립되므로 다음과 같은 관계식을 정립할 수 있다.

DES 알고리즘 사용하기

DES가 어떻게 작동하는지 대략적으로 알아봤으니, 이번엔 유닉스 시스템에서 DES 암호화를 사용하는 방법을 간략하게 소개해보려고 한다.

openssl 명령어를 가지고 여러가지 암호화 패키지를 사용할 수 있는데, DES는 다음과 같이 이용할 수 있다. 여기서 사용자가 입력한 암호를 가지고 암호화 키를 생성한다.

$ echo "The cake was a lie" | openssl des > message.enc
enter des-cbc encryption password:
Verifying - enter des-cbc encryption password:

hexdump 명령어를 이용해서 message.enc 파일의 내용을 보면 전혀 알아볼 수 없는 내용이 들어가있다.

$ hexdump -C message.enc
00000000  53 61 6c 74 65 64 5f 5f  0d d5 79 3a c1 ce 58 21  |Salted__..y:..X!|
00000010  57 5c bd e3 4c f5 b5 94  3c 93 1a 6e 07 67 2b 7f  |W\..L...<..n.g+.|
00000020  82 05 52 94 5b 65 10 c7                           |..R.[e..|
00000028

다시 원래의 메세지로 복호화를 시켜보자. 아까 암호화 할 때 입력했던 암호를 그대로 입력하면 된다.

$ cat message.enc | openssl des -d
enter des-cbc decryption password:
The cake was a lie

원래의 메세지가 출력되는 것을 볼 수 있다.

키의 길이

DES는 56비트 길이의 키를 가지는데, 오늘날 컴퓨팅 기술의 발전으로 인해 짧은 키를 사용하는 DES는 더이상 안전하지 않다고 알려져있다. 따라서 DES보다는 Triple DES를 사용할 것을 권장한다.

널리 사용되는 비밀키 암호화 알고리즘 중에 AES (Advanced Encryption Standard)라는 것이 있는데, 이 AES 알고리즘에서 사용되는 128비트, 256비트 길이의 키에 대해서 얘기해보려고 한다.

암호화 알고리즘 자체에 별다른 문제가 존재하지 않는 이상, 비밀키 암호화를 깨는 유일한 방법은 무차별 대입 공격(brute-force attack)이다. 한마디로 가능한 모든 키를 대입해보는 것이다.

하지만 이 무차별 대입 공격은 키의 길이가 어느정도 이상 되면 거의 무용지물이다. 이는 경우의 수가 너무 많기 때문인데, 참고로 128비트 암호화 키로 만들어낼 수 있는 경우의 수는 $2^{128}$이다. 이렇게만 써 놓으면 얼마나 큰 숫자인지 감이 잘 오지 않을 수도 있으니 여러가지 예를 들어보자.

10진수로 나타내었을 때 자릿수가 무려 39자리 라는 것이다. 정확한 값은 다음과 같다.

너무나 큰 숫자라서 비교 대상이 마땅치 않지만, 억지로 비슷한(?) 범위의 숫자를 찾아보자면 지구에 있는 박테리아의 수 정도가 되겠는데, 이는 $5 \times 10^{30}$ 정도로 추정되고 있다.4

이번엔 256비트 키가 가질 수 있는 경우의 수를 보자.

(알려진) 우주에 존재하는 원자의 개수가 약 $10^{80}$에서 $10^{85}$개 정도로 알려져 있으니5 4, 256비트 비밀키가 가질 수 있는 경우의 수는 실로 엄청나게 많다는 것을 알 수 있다.

비밀키 기반 암호화 방식은 그 구조가 비교적 단순하여 빠르게 동작할 수 있고, 일정 수준 이상의 견고함을 보장한다는 장점이 있지만[citation needed], 보안 통신에 참여하는 인원수와 비례해서 관리해야 할 키의 개수가 늘어난다는 단점이 있다.

공개키 암호화

비밀키 암호화와는 상반되는 개념으로 공개키(public key) 암호화가 있는데, 비대칭키(asymmetric key) 암호화 라고도 한다. 대표적인 공개키 암호화 알고리즘으로는 RSA를 꼽을 수 있다. 알고리즘을 고안한 사람들(Ron Rivest, Adi Shamir, Leonard Adleman) 이름의 앞 글자를 따서 RSA라 한다6. 비밀키 암호화 방식과의 가장 큰 차이는 암호화를 할 때 사용하는 키와 복호화를 할 때 사용하는 키가 서로 다르다는 것이다.

공개키는 두 가지 요소로 구성되어있다. 암호화 키와 복호화 키. 이 둘을 묶어서 키 페어(key pair)라고 부른다. 밥이 앨리스에게 암호화 키를 건네주면 앨리스는 그걸로 데이터를 암호화 해서 밥에게 보낸다. 밥은 자신만이 가지고 있는 복호화 키를 이용해서 암호화된 데이터를 다시 원문으로 복호화 시킨다.

공개키 기반 암호화를 이용한 통신 과정

여기서 중요하게 짚고 넘어가야 할 점은 암호화 키와 복호화 키가 서로 다르다는 것이다. 밥이 앨리스에게 암호화 키를 전송하는 과정에서 키가 제 3자에게 노출된다고 하더라도, 앨리스가 밥에게 보낸 메세지를 해독하는 일은 불가능하다. 또한, 보안 통신에 참여하는 인원수가 늘어난다고 해도 밥이 관리해야 할 키의 개수는 단 한개뿐이다.

그럼 공개키 암호화 방식만 사용하면 될 것이지, 무엇 하러 키 관리가 어려운 비밀키 암호화 방식을 사용하느냐고 묻는 사람도 있을 것이다. 암호화 키와 복호화 키가 따로 있는 공개키 암호화 방식은 키 관리가 용이하다는 장점이 있지만, 비밀키 암호화 방식에 비해서 현저히 느리다[citation needed]. 많은 양의 데이터를 암호화 할 때에는 비밀키 암호화 알고리즘으로 암호화를 하고, 그 비밀키를 공개키 암호화 알고리즘으로 암호화 하는 것이 일반적이다. 양쪽의 장점만 취하는 것이다.

또한, 비밀키 암호화 방식과 비교했을 때 공개키의 길이가 상당히 길다는 것을 알 수 있다. 128비트에서 256비트 사이의 키를 주로 사용하는 비밀키 암호와 달리 공개키 암호는 주로 1024비트, 2048비트의 훨씬 긴 키를 사용하는데, 이는 특수한 성질을 요구하는 공개키의 특성을 이용하여 공개키가 될 수 없는 키들을 미리 제외시키는 일이 가능하기 때문이다.

그럼 실제로 RSA가 어떻게 동작하는지 알아보자. 밥이 일단 두 개의 소수(prime number) pq를 선택하고, 그 둘을 곱한다.

그리고 다음과 같은 성질을 가지는 암호화 지수(encryption exponent) e를 선택한다.

그런 다음 밥은 앨리스에게 암호화 키인 $(n, e)$를 전송하고, pq는 아무한테도 공개하지 않는다. 암호화 키를 넘겨받은 앨리스는 다음과 같이 메세지 m을 암호화 하여 암호문 c를 밥에게 전송한다.

$$ c \equiv m^e \mod n $

앨리스로부터 암호문을 넘겨받은 밥은 다음과 같이 복호화 지수(decryption exponent) d를 계산한다.

그런 다음, 암호문 c를 다음과 같이 복호화 한다.

pq의 값을 결정할 때 주의해야 할 사항이 하나 있다. 두 값이 너무 가까워서도 안 되고, 또 너무 멀어서도 안 된다는 것이다. 예를 들어서 두 수가 서로 너무 가까우면 $\sqrt{n}$부터 시작해서 무차별 대입 공격으로 $n = pq$을 만족하는 pq의 값을 찾을 수 있다. 반대로, 두 수가 서로 너무 멀면 pq 중 하나는 너무 작은 값이 되므로 그 값을 찾기 수월해진다.

앨리스에게 보낸 암호화 키 $(n, e)$를 가지고 pq의 값을 알아내는건 현실적으로 불가능하다. 물론 충분한 시간과 자원이 주어지면 모든 경우의 수를 고려해서 억지로 알아내는 일이 가능하겠지만, 일반적인 개인용 컴퓨터를 이용한다면 영겁의 세월이 지나야만 가능한 일이다. 천만달러의 고성능 기계로도 1024비트 RSA키를 깨는데 무려 3,000,000년이 걸릴 것이라고 추정한 사람도 있다.7 이러한 추정치가 2002년에 내놓은 것이고 지난 11년간의 기술의 발전을 고려했을 때, 똑같은 비용을 투자한다고 가정하면 300만년보다는 시간이 조금 덜 걸리겠지만, 우리가 살아있는 동안 RSA 키를 깨는 모습을 보지 못 한다는 사실에는 변함이 없다. 다시 말해서 복호화 키를 구성하는 두 개의 소수 pq가 없이는 메세지를 복호화 하는 일은 현실적으로 불가능하다는 것이다. 결과적으로 이 두 개의 소수를 다른 사람에게 공개하지 않고도 보안이 유지되는 통신을 하는 일이 가능한 것이다.

마무리

인류는 수천년 전 부터 암호학에 많은 관심이 있었다. 수학이 발달되지 않아서 현대적인 암호학적 기법이 존재하지 않았던 시절에도 ROT-13과 같은 암호 기법을 만들어 사용했다. 현대적인 컴퓨터가 없던 시절에는 기계식 암호화를 사용했었다. 여러가지 역사적 사건에서도 볼 수 있듯이 암호학은 전쟁의 승패를 결정짓는데 중요한 역할을 하기도 했다.

암호학은 우리 생활 곳곳에 숨어있다. 아마존에서 물건을 주문할 때에도 필요하고, 회사에서 직원들에게 매달 월급을 줄 때에도 필요하다. 이동통신사들의 GSM, CDMA 통신망에도, 은행 ATM 기계의 통신망에서도 암호학의 도움 없이는 안전한 통신을 보장하지 못한다. 매일같이 사용하는 이메일과 페이스북 계정의 보안, 우리가 가지고 있는 은행 계좌의 안전, 국가 안보 등 이 모든 것이 공개키를 구성하는 두 개의 소수를 찾는데 얼마나 오랜 시간이 걸리는지에 달렸다고 해도 과언이 아니다.

체이스 은행 보안 인증서

사실, 현존하는 암호화 알고리즘은 충분한 시간과 자원이 주어진다면 무력화 시킬 수 있다. 그럼에도 불구하고 현재 널리 사용되고 있는 암호화 알고리즘들이 안전하다고 판단되는 이유는 무엇일까? 만약 누군가가 천문학적인 비용을 투자해서 앨리스가 밥에게 보낸 암호화된 메세지를 100년만에 깼다고 가정해보자. 그 메세지의 내용은 100년 후의 누군가에게 가치가 있을까? 메세지의 내용이 앨리스의 신용카드 번호라고 해도 그건 더이상 이용 가치가 없는 정보이다. 대부분의 신용카드는 3-5년을 주기로 만료되기 때문이다. 미국 정부에서 다루는 기밀 정보(classified information)도 기밀을 유지하는 유효 기간이 있다. 기본적으로는 25년의 유효 기간을 갖지만, 때에 따라서는 그것보다 길 수도 있다. 유효 기간이 지나면 기밀 상태가 해제되어 일반에 공개된다.8 이처럼 우리가 다루는 정보는 (특별한 경우를 제외하고는) 일정 시간이 지나면 그 가치를 잃게 되어있는데, 이런 이유로 일정 시간 안에 암호화된 메세지를 해독하는 일이 불가능하면 그 암호화는 현실적으로(practically) 안전하다고 말할 수 있는 것이다.

도전 과제

message.enc

이 첨부 파일에는 $40짜리 스타벅스 기프트 카드가 숨겨진 위치가 쓰여있다. 메세지를 해독한 사람은 카드를 가져가도 좋다. 카드를 한 장 밖에 준비하지 못한 관계로 선착순 한 명만 카드를 가져갈 수 있고, 제한 시간은 이 글이 출판된 날로부터 180일이다.

  1. Unknown Author. “SEED 암호 알고리즘.” KISA. KISA, n.d. Web. 29 Feb. 2013. 

  2. 농담 반, 진담 반이다. 

  3. Trappe, Wade, and Lawrence C. Washington. Introduction to Cryptography: With Coding Theory. Upper Saddle River, NJ: Pearson Prentice Hall, 2006. 50. Print. 

  4. Multiple Authors. “Orders of Magnitude (numbers).” Wikipedia. Wikimedia Foundation, 29 Mar. 2013. Web. 31 Mar. 2013.  2

  5. http://www.wolframalpha.com/input/?i=number+of+atoms+in+universe&lk=4&num=1 

  6. Multiple Authors. “RSA (algorithm).” Wikipedia. Wikimedia Foundation, 29 Mar. 2013. Web. 30 Mar. 2013. 

  7. Silverman, Robert D. “Has the RSA Algorithm Been Compromised as a Result of Bernstein’s Paper?RSA Laboratories. N.p., 8 Apr. 2002. Web. 30 Mar. 2013. 

  8. Multiple Authors. “Classified Information in the United States - Declassification.” Wikipedia. Wikimedia Foundation, 29 Mar. 2013. Web. 31 Mar. 2013.