내가 Vanilla JS와 백엔드 없이 'Forever' 파일 업로더를 만든 방법
Source: Dev.to
동기
현재 파일 공유 상황에 지쳤습니다:
- WeTransfer: 결제하지 않으면 2 GB 용량 제한.
- Google Drive: 로그인 필요하고 신원을 추적합니다.
- Discord: 큰 파일은 차단됩니다.
서버 비용을 지불하거나 개인 데이터를 노출하지 않고, 친구에게 영구적으로 거대한 파일을 전송할 방법이 필요했습니다.
SimpleShare 소개
SimpleShare는 전통적인 파일 호스팅 서비스가 아니라 분산 암호화 엔진으로 동작하는 브라우저 전용 애플리케이션입니다.
스마트 압축
브라우저가 CompressionStream API를 사용해 파일이 컴퓨터를 떠나기 전에 크기를 줄입니다.
군사 수준 암호화
파일은 AES‑256‑GCM 암호화로 “디지털 잡음”으로 변환되며, 전 과정이 클라이언트 장치에서 수행됩니다.
원자 단위 슬라이싱
대용량 파일(예: 10 GB)은 200 MB “원자”로 나뉘어 보다 쉽게 처리됩니다.
원장
암호화된 원자는 공개 CORS 프록시를 통해 영구 파일 호스트인 Catbox에 업로드됩니다.
키
웹사이트는 12자리 코드(또는 매직 링크)를 생성합니다. 이 코드는 원자를 찾는 지도와 원자를 복호화하는 데 필요한 비밀번호를 포함합니다.
구현 세부 사항
키 파생 예시 (JavaScript)
async function deriveKeyFromPassword(password) {
const enc = new TextEncoder();
const keyMaterial = await window.crypto.subtle.importKey(
"raw",
enc.encode(password),
{ name: "PBKDF2" },
false,
["deriveKey"]
);
return window.crypto.subtle.deriveKey(
{
name: "PBKDF2",
salt: enc.encode("NeuralShareSalt"),
iterations: 100000,
hash: "SHA-256"
},
keyMaterial,
{ name: "AES-GCM", length: 256 },
true,
["encrypt", "decrypt"]
);
}
사용해 보기
SimpleShare를 여기서 체험해 보세요: