- C# 94.2%
- PowerShell 5.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| App | ||
| .gitignore | ||
| CONTRIBUTING.md | ||
| favicon.ico | ||
| FrostkVault.csproj | ||
| FrostkVault.sln | ||
| LICENSE | ||
| README.md | ||
| release.ps1 | ||
| SECURITY.md | ||
Frostk Vault
파일을 개별 .frostk 파일로 잠그고, 비밀번호로 다시 여는 Windows 데스크톱 앱입니다.
폴더를 끌어 놓고 필요한 파일만 선택해 처리할 수 있습니다. 파일을 하나의 압축 파일로 묶지 않으며, 하위 폴더 구조를 유지합니다. 암호화 파일에는 비밀번호로 보호된 키가 들어 있어 별도의 키 파일 없이 다른 폴더에서도 복호화할 수 있습니다.
Windows x64 · C# / .NET 8 · Windows Forms
사용 전 확인: 512 MiB 이상 파일은 일부 구간만 암호화합니다. 나머지 내용은 평문으로 남으므로, 파일 전체의 기밀성이 필요한 용도에는 적합하지 않습니다. 원본을 직접 변경하는 방식이므로 중요한 파일은 먼저 별도로 백업하세요. 자세한 보호 범위는 보안 안내를 확인하세요.
주요 기능
| 기능 | 동작 |
|---|---|
| 개별 파일 암호화 | 원본과 같은 폴더에서 무작위 이름의 .frostk 파일로 변경 |
| 비밀번호 기반 잠금 해제 | AES-256-GCM, PBKDF2-HMAC-SHA256 600,000회, HKDF-SHA256 사용 |
| 폴더 단위 탐색 | 하위 폴더를 포함해 탐색하고 선택한 파일만 처리 |
| 파일 정보 복원 | 원본 파일명, 생성·수정·접근 일시, Windows 파일 속성 복원 |
| 빠른 파일 열기 | 일반 파일은 바로 열고, 암호화 파일은 해당 파일만 복호화한 뒤 열기 |
| 작업 제어 | 파일 단위 병렬 처리, 동시 작업 수 설정, 취소와 진행 상태 표시 |
| 중단 복구 | 남아 있는 작업 기록을 이용해 재개 또는 복원 시도 |
| 런타임 포함 배포 | self-contained 배포판은 별도 .NET 런타임 설치 없이 실행 |
시작하기
실행 환경
- Windows 10 / 11, x64
- 실행 파일이 있는 릴리스 ZIP 또는 소스를 직접 빌드한 결과물
ZIP 배포판을 사용하는 경우 압축을 풀고 FrostkVault.exe를 실행합니다. 함께 들어 있는 런타임 DLL도 같은 폴더에 보관하세요. 소스에서 실행 파일을 만드는 방법은 아래 빌드 및 검증을 참고하세요.
파일 암호화
암호화모드를 선택합니다.- 폴더를 창에 끌어 놓거나
폴더 선택을 누릅니다. - 비밀번호와 비밀번호 확인을 입력합니다.
- 목록에서 파일을 선택하고
선택 파일 암호화를 누릅니다.
완료된 파일은 원래 폴더에 무작위 이름의 .frostk 파일로 남습니다. 비밀번호를 잊으면 복구할 수 없으므로 안전하게 관리하세요.
파일 복호화
복호화모드를 선택합니다..frostk파일이 있는 폴더를 선택합니다.- 비밀번호를 입력하고
목록 열기 / 새로고침을 누릅니다. - 목록에서 파일을 선택하고
선택 파일 복호화를 누릅니다.
잠금 해제된 목록에서 암호화 파일을 더블클릭하면 그 파일 하나만 복호화한 뒤 기본 연결 프로그램으로 엽니다. 복호화 모드에서는 처리된 항목만 목록에서 제거되며 기존 정렬과 스크롤 위치를 유지합니다. 일반 파일을 더블클릭하면 바로 엽니다.
복호화는 원본 파일을 다시 만드는 작업입니다. 파일을 연 이후에도 복호화된 파일이 디스크에 남습니다.
암호화 방식
파일 본문 전체를 별도 파일로 복사하지 않고, 선택한 구간을 원본 파일 안에서 덮어씁니다. 먼저 복구용 준비 기록과 파일 끝의 트레일러를 기록하고 디스크 반영을 요청한 다음 본문을 변경합니다.
| 파일 크기 | 처리 범위 |
|---|---|
| 512 MiB 미만 | 파일 본문 전체 |
| 512 MiB 이상 | 선두 8 MiB, 후미 4 MiB 및 파일 전역에 분산한 추가 구간 |
대용량 파일은 4 MiB 청크를 사용하며, 목표 암호화량은 파일 크기의 약 1%입니다. 최소 64 MiB, 최대 256 MiB를 처리합니다. 예를 들어 5 GiB 파일은 64 MiB, 100 GiB 파일은 256 MiB를 암호화합니다. 파일 형식별 분석 없이 동일한 규칙을 적용하므로, 부분 암호화 후에도 일부 내용이 읽히거나 복구될 수 있습니다.
파일 끝의 트레일러에는 암호화된 파일명·일시·속성, 비밀번호로 보호된 마스터 키, 구간 위치와 인증·복구 정보가 들어갑니다. 이 정보 전체가 암호화되는 것은 아닙니다. 원래 디렉터리 경로는 저장하지 않으므로 .frostk 파일을 다른 폴더로 옮긴 뒤 복호화하면 현재 폴더에 원래 파일명으로 복원됩니다.
중단된 작업
같은 폴더를 다시 선택하고 올바른 비밀번호로 목록을 열거나 작업을 시작하면, 남아 있는 트랜잭션 기록을 바탕으로 복구를 시도합니다. 각 구간이 온전한 원문인지 암호문인지 HMAC과 인증 태그로 판별합니다.
다만 전원 차단 등으로 구간 일부만 덮어써진 경우에는 원문과 암호문 어느 쪽으로도 검증되지 않아 복구할 수 없을 수 있습니다. Flush(true) 호출이나 복구 기록이 모든 저장 장치 장애에서 데이터 보존을 보장하지는 않습니다. 중단된 파일과 .enc-txn, .dec-txn, .frostk-prepare-txn, .frostk-restore-txn 기록은 임의로 삭제하지 마세요.
빌드 및 검증
Windows에서 .NET 8을 대상으로 빌드할 수 있는 SDK가 필요합니다.
dotnet build .\FrostkVault.sln -c Release
dotnet publish .\FrostkVault.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
실행 파일 경로:
bin\Release\net8.0-windows\win-x64\publish\FrostkVault.exe
기존 자체 테스트와 UI 스모크 검사를 실행하려면 다음 명령을 사용합니다. GUI 실행 파일의 종료를 명시적으로 기다리고 종료 코드를 확인합니다.
$exe = '.\bin\Release\net8.0-windows\win-x64\publish\FrostkVault.exe'
foreach ($check in @('--self-test', '--ui-smoke-test')) {
$process = Start-Process -FilePath $exe -ArgumentList $check -WindowStyle Hidden -Wait -PassThru
if ($process.ExitCode -ne 0) { throw "$check failed: $($process.ExitCode)" }
}
자체 테스트는 임시 폴더에 테스트 데이터를 생성하며, 600 MiB 크기의 대용량 사례도 포함합니다. 빈 파일, 한글 파일명, 파일 정보 복원, 병렬 처리, 잘못된 비밀번호, 트레일러 변조, 단독 .frostk 파일 복호화, 암호화·복호화 왕복과 모의 중단 복구를 확인합니다. UI 스모크 검사는 창 초기화와 코드에 정의된 기본 검사를 수행합니다. 실제 전원 차단 시험이나 모든 사용자 조작에 대한 검증은 아닙니다.
릴리스 패키지 만들기
# 태그 없이 빌드·검증·패키징
.\release.ps1 -Version 1.0.1 -SkipTag
# 변경 사항을 커밋한 뒤 로컬 릴리스 태그까지 생성
.\release.ps1 -Version 1.0.1
# 명시적으로 원격 태그 전송까지 수행
.\release.ps1 -Version 1.0.1 -Push
스크립트는 self-contained 빌드, 자체 테스트, UI 스모크 검사 후 실행 파일, 런타임 DLL과 안내 문서를 ZIP으로 묶고 SHA-256 체크섬을 생성합니다. -SkipSelfTest는 두 검사를 모두 건너뛰므로 검증된 릴리스에는 사용하지 마세요. 태그 생성에는 깨끗한 Git 작업 트리가 필요하며, -Push는 태그를 origin에 전송합니다. 호스팅 서비스의 릴리스 페이지와 첨부 파일 업로드는 별도로 진행합니다.
dist/
FrostkVault-v1.0.1-win-x64.zip
FrostkVault-v1.0.1-win-x64.zip.sha256
ZIP의 체크섬은 Get-FileHash .\FrostkVault-v1.0.1-win-x64.zip -Algorithm SHA256으로 확인할 수 있습니다. 신뢰할 수 있는 배포 경로에서 받은 체크섬과 비교하세요.
소스 구성
App/
Core/ 암호화 형식, 키 관리, 파일 처리와 자체 테스트
UI/ Windows Forms 화면과 사용자 정의 컨트롤
Program.cs 앱 및 검사 모드 진입점
release.ps1 로컬 검증, 배포 ZIP과 체크섬, 선택적 Git 태그 생성
변경 제안과 재현 정보 작성은 기여 안내, 보호 범위와 보안 문제 제보는 보안 안내를 참고하세요.
라이선스
Frostk Vault는 MIT 라이선스로 배포됩니다.