728x90
300x250

[ASP.NET] 내장 암호화(HashPasswordForStoringInConfigFile) 기법 사용하기 - 복호화(X)

내장 암호화 전 게시물에 이어 이번에는 복호화(Decrypt)가 불가능한 기법에 대해 소개하겠습니다.
라이브러리의 물리 경로는 System.Web.Security.FormsAuthenication.HashPasswordForStoringInConfigFile에 있습니다.
이 라이브러리의 형식은 다음과 같습니다.

public static string HashPasswordForStoringInConfigFile(string password, string passwordFormat)



1. string password 세부항목

string password는 부호화시킬 대상의 암호를 문자열로 입력하면 됩니다.
string passwordFormat은 System.Web.Configuration.FormsAuthPasswordFormat 열거형 값 중 하나를 나타내는 String입니다.

참고1) System.Web.Configuration.FormsAuthPasswordFormat 열거형 값

string password는 부호화시킬 대상의 암호를 문자열로 입력하면 됩니다.
string passwordFormat은 System.Web.Configuration.FormsAuthPasswordFormat 열거형 값 중 하나를 나타내는 String입니다.


2. string passwordFormat 세부항목

 
                           표2-1. System.Web.Configuration.FormsAuthPasswordFormat 열거형 값

 번호

 종류

 비고 

 1

 Clear

 암호화 시키지 않습니다.

 2

 MD5

 암호화

 3

 SHA1

 암호화


3. MD5와 SHA1(읽어보기)


                                     표2-2. MD5와 SHA1의 특징 및 문제점 그리고 현재는?


MD5(Message-Digest algorithm 5)
는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용됩니다. 1991년에 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했습니다.

1996년에 MD5의 설계상 결함이 발견되었습니다. 이것은 매우 치명적인 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1와 같이 다른 안전한 알고리즘을 사용할 것을 권장하기 시작했습니다. 2004년에는 더욱 심한 암호화 결함[1]이 발견되었고. 2006년에는 노트북 컴퓨터 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 발표[2]되기도 하였습니다. 현재 MD5 알고리즘을 보안 관련 용도로 쓰는 것은 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있습니다. 2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표되기도 했습니다.

 


SHA(Secure Hash Algorithm, 안전한 해쉬 알고리즘) 함수들은 서로 관련된 암호학적 해쉬 함수들의 모음입니다. 이들 함수는 미국 국가 안전 보장국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정되었습니다. SHA 함수군에 속하는 최초의 함수는 공식적으로 SHA라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여 SHA-0이라고도 불립니다. 2년 후 SHA-0의 변형인 SHA-1이 발표되었으며, 그 후에 4종류의 변형, 즉 SHA-224, SHA-256, SHA-384, SHA-512가 더 발표되었습니다. 이들을 통칭해서 SHA-2라고 하기도 합니다.

SHA-1은 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 합니다. 혹자는 좀 더 중요한 기술에는 SHA-256이나 그 이상의 알고리즘을 사용할 것을 권장합니다.

SHA-0과 SHA-1에 대한 공격은 이미 발견되었습니다. SHA-2에 대한 공격은 아직 발견되지 않았으나, 전문가들은 SHA-2 함수들이 SHA-1과 비슷한 방법을 사용하기 때문에 공격이 발견될 가능성이 있다고 지적합니다. 이들은 이제 새로운 해쉬 함수 표준을 위해 후보 함수들을 개발하고 있습니다.

 


4. 출력물

이 결과를 토대로 볼 때 그래도 MD-5보다는 SHA1이 낫다는 것을 확인할 수 있습니다.
라이브러리를 사용하면 구현하기 쉽습니다. 물론 라이브러리를 직접 구현한다면 매우 복잡하고 어렵습니다.
이번 실습에서는 아래와 같은 화면을 구현하여 암호 알고리즘을 적용하는 방법을 설명하겠습니다.



1. 새 프로젝트 만들기



ASP 빈 프로젝트를 만듭니다.

2. 빈 항목 추가하기(ASPX)



적당히 설정 후 추가 버튼을 누릅니다.

3. Label 만들기



도구 모음에서 Label을 하나 선택하여 만듭니다.

3. 코딩

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
            string sField = "1";
            Label1.Text = FormsAuthentication.HashPasswordForStoringInConfigFile(sField, "SHA1");

        }
    }
}



5. 참고자료(Reference)

1. http://ko.wikipedia.org/wiki/MD5, Accessed by 2011-01-23
2. http://ko.wikipedia.org/wiki/SHA, Accessed by 2011-01-23

반응형
728x90
300x250

[ASP.NET] 폼 인증 방식

ASP.NET는 새로운 인증 방식을 지원합니다. 인증 방식에는 Passport 인증, Windows 인증, Forms 인증이 있습니다.
인증 방식은 종류가 매우 다양합니다. ASP.NET에는 쿠키 상태, 세션 상태, Application 상태 등이 있습니다.
상태 관리를 변형하면 인증 방식으로도 사용할 수 있습니다. 그러므로 인증 방식의 종류가 매우 다양합니다.
인증 방식에 따라 코드가 간단하지만, 보안에 취약한 경우가 있을 것입니다.
흔히 우리는 쿠키를 통한 인증을 자주 사용합니다. 왜냐하면, Temporary Folder에 저장되므로 고급 사용자가 아닌 이상 접근할 빈도가 낮게 구현하기가 쉽기 때문입니다.


1) 인증 방식의 종류
Passport 인증 - MS의 Passport 서비스를 이용하여 인증합니다.
Windows 인증(우리가 사용하는 윈도우 계정) - 가장 강력하지만, 사내 인트라넷에서 사용하므로 사내 첩자를 찾아낼 수 있도록 탐지기술 도입이 
                                                                    필요 합니다.
Forms 인증 - 쿠키를 이용하여 인증처리를 구현합니다. 쉽게 구현가능하며 .NET Framework에 포함된 보안 기술을 사용할 수 있습니다.
사용자 지정 - 말 그대로 사용자가 직접 인증 프로세스를 만들어 냅니다. 구현하는 데 다소 복잡하다는 특성을 가지고 있습니다.

Web.Config

중략
<system.web>
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="로그인페이지.aspx" defaultUrl="로그인 후에 접속할 페이지.aspx"></form>
</authentication>
</system.web>
중략

로그인 페이지에서 버튼에 프로세스 - 구현

버튼()
{
FormsAuthentication.RedirectFromLoginPage(인증아이디식별단자, 쿠키 보존 여부);
}

쿠키 보존 여부 : true, false

로그아웃 페이지에서의 버튼에 적용하기 - 구현

버튼()
{
FormsAuthentication.SignOut();
            Response.Redirect("로그아웃 후에 이동할 페이지.aspx");
}



2. 부록) 사용자 옵션

1) Protection: 쿠키에 사용되는 암호화 유형
Validation: 쿠키 변경 여부를 검사하여 데이터의 유효성 여부를 확인합니다.
None: 3DES, DES를 사용하여 암호화를 하지만, 쿠키에서 데이터의 유효성 검사는 수행하지 않습니다.
Encryption: 개인 설정 정보를 제공할 때만, 쿠키를 사용하고 보안 요구 사항이 낮은 사이트에 대해서는 암호화와 유효성 검사를 해지합니다.
All(기본값): 응용 프로그램이 데이터의 유효성 검사 및 암호화를 모두 사용하여 쿠키를 보호하도록 지정합니다.

2) Timeout: 쿠키가 만료될 때까지의 시간 지정
3) slidingExpiration: 상대(sliding) 만료의 설정 여부를 지정합니다. 기본값은 .NET Framework 1.x에서는 true이고, .NET Framework 2.0에서는 False입니다.

True: 새로 고침 하면 다시 갱신
False: 만료기간 제거

4) name: 인증 쿠키의 이름 지정 (기본값: .ASPAUTH)
5) domain: 쿠키를 공유할 수 있는 도메인 설정
6) Cookless: 인증 쿠키의 사용 여부 및 동작 설정
UseCookies: 장치에 관계없이 쿠키를 항상 사용합니다.
UseUrl: 쿠키를 사용하지 않고 인증 정보를 URL에 저장합니다.
AutoDetect: 브라우저에서 쿠키를 지원하면 쿠키를 사용하고 그렇지 않으면, 쿠키를 사용하지 않습니다.
UseDeviceProfile(기본값): 장치 프로필에서 쿠키를 지원하면 쿠키를 사용하고 그렇지 않으면, 쿠키를 사용하지 않습니다.

7) EnableCrossAppRedirects

폼 인증 티켓이 쿠키에 저장되어 있지 않은 경우 인증된 사용자를 다른 웹 응용 프로그램의 URL로 리디렉션할 수 있는지 여부를 나타내는 값을 가져옵니다.


3. 참고자료(Reference)

1. 기술지원, http://msdn.microsoft.com/ko-kr/library/9wff0kyh.aspx

반응형

+ Recent posts