제4장

워터마킹 기술

보이지 않는 디지털 서명으로 콘텐츠 소유권 보호

디지털 워터마킹 개요

디지털 워터마킹은 콘텐츠에 보이지 않거나 감지하기 어려운 정보를 삽입하는 기술입니다. 지문(fingerprinting)이 콘텐츠의 고유한 특성을 추출하는 것이라면, 워터마킹은 새로운 정보를 콘텐츠에 능동적으로 삽입합니다.

워터마킹은 다음과 같은 목적으로 사용됩니다:

ℹ️ 워터마킹의 핵심 요구사항
비가시성(Imperceptibility): 인간이 감지할 수 없어야 함
강인성(Robustness): 압축, 크기 조정 등의 변환에 견뎌야 함
용량(Capacity): 충분한 정보를 담을 수 있어야 함
보안성(Security): 무단 제거가 어려워야 함

이미지 워터마킹 기술

이미지 워터마킹은 가장 성숙한 분야로, 다양한 알고리즘이 개발되어 있습니다.

최하위 비트(LSB) 워터마킹

가장 단순한 방법으로, 픽셀의 최하위 비트를 워터마크 데이터로 대체합니다. 빠르지만 압축에 취약합니다.

// LSB 워터마킹 구현
import sharp from 'sharp';

async function embedLSBWatermark(
    imagePath: string,
    watermarkText: string,
    outputPath: string
): Promise {
    // 1. 이미지를 원시 픽셀 데이터로 로드
    const { data, info } = await sharp(imagePath)
        .raw()
        .toBuffer({ resolveWithObject: true });

    // 2. 워터마크 텍스트를 이진수로 변환
    const watermarkBits = textToBinary(watermarkText);

    // 3. 길이 정보 추가 (처음 32비트)
    const lengthBits = watermarkBits.length.toString(2).padStart(32, '0');
    const fullWatermark = lengthBits + watermarkBits;

    // 4. 픽셀 데이터 수정
    const pixels = new Uint8Array(data);
    for (let i = 0; i < fullWatermark.length; i++) {
        // RGB 중 파란색 채널의 LSB 수정 (덜 눈에 띔)
        const pixelIndex = i * info.channels + 2;
        const bit = parseInt(fullWatermark[i]);

        // LSB를 워터마크 비트로 교체
        pixels[pixelIndex] = (pixels[pixelIndex] & 0xFE) | bit;
    }

    // 5. 워터마크된 이미지 저장
    await sharp(Buffer.from(pixels), {
        raw: {
            width: info.width,
            height: info.height,
            channels: info.channels
        }
    })
    .png()  // 무손실 형식 사용 필수
    .toFile(outputPath);

    console.log(`✅ 워터마크 삽입 완료: ${watermarkText}`);
}

// 텍스트를 이진수로 변환
function textToBinary(text: string): string {
    return text.split('')
        .map(char => char.charCodeAt(0).toString(2).padStart(8, '0'))
        .join('');
}

// 워터마크 추출
async function extractLSBWatermark(imagePath: string): Promise {
    const { data, info } = await sharp(imagePath)
        .raw()
        .toBuffer({ resolveWithObject: true });

    const pixels = new Uint8Array(data);

    // 1. 길이 정보 읽기 (처음 32비트)
    let lengthBits = '';
    for (let i = 0; i < 32; i++) {
        const pixelIndex = i * info.channels + 2;
        lengthBits += (pixels[pixelIndex] & 1).toString();
    }
    const length = parseInt(lengthBits, 2);

    // 2. 워터마크 데이터 읽기
    let watermarkBits = '';
    for (let i = 32; i < 32 + length; i++) {
        const pixelIndex = i * info.channels + 2;
        watermarkBits += (pixels[pixelIndex] & 1).toString();
    }

    // 3. 이진수를 텍스트로 변환
    const text = binaryToText(watermarkBits);

    return text;
}

// 이진수를 텍스트로 변환
function binaryToText(binary: string): string {
    const chars: string[] = [];
    for (let i = 0; i < binary.length; i += 8) {
        const byte = binary.slice(i, i + 8);
        chars.push(String.fromCharCode(parseInt(byte, 2)));
    }
    return chars.join('');
}

// 사용 예제
await embedLSBWatermark(
    'original.png',
    'WIA-AI-017 © 2025 SmileStory',
    'watermarked.png'
);

const extracted = await extractLSBWatermark('watermarked.png');
console.log('추출된 워터마크:', extracted);
⚠️ LSB 워터마킹의 한계
LSB 워터마킹은 무손실 형식(PNG)에서만 작동합니다. JPEG 압축은 LSB를 파괴하므로 주파수 영역 기법이 필요합니다.

DCT 기반 워터마킹

이산 코사인 변환(DCT)을 사용하여 주파수 영역에 워터마크를 삽입합니다. JPEG 압축에 강인합니다.

// DCT 기반 워터마킹
import sharp from 'sharp';

class DCTWatermarker {
    // 2D DCT 적용
    private dct2d(block: number[][]): number[][] {
        const N = block.length;
        const result: number[][] = Array(N).fill(0).map(() => Array(N).fill(0));

        for (let u = 0; u < N; u++) {
            for (let v = 0; v < N; v++) {
                let sum = 0;
                for (let i = 0; i < N; i++) {
                    for (let j = 0; j < N; j++) {
                        sum += block[i][j] *
                               Math.cos(((2*i+1) * u * Math.PI) / (2*N)) *
                               Math.cos(((2*j+1) * v * Math.PI) / (2*N));
                    }
                }
                const cu = u === 0 ? 1/Math.sqrt(2) : 1;
                const cv = v === 0 ? 1/Math.sqrt(2) : 1;
                result[u][v] = (2/N) * cu * cv * sum;
            }
        }
        return result;
    }

    // 역 DCT
    private idct2d(block: number[][]): number[][] {
        const N = block.length;
        const result: number[][] = Array(N).fill(0).map(() => Array(N).fill(0));

        for (let i = 0; i < N; i++) {
            for (let j = 0; j < N; j++) {
                let sum = 0;
                for (let u = 0; u < N; u++) {
                    for (let v = 0; v < N; v++) {
                        const cu = u === 0 ? 1/Math.sqrt(2) : 1;
                        const cv = v === 0 ? 1/Math.sqrt(2) : 1;
                        sum += cu * cv * block[u][v] *
                               Math.cos(((2*i+1) * u * Math.PI) / (2*N)) *
                               Math.cos(((2*j+1) * v * Math.PI) / (2*N));
                    }
                }
                result[i][j] = (2/N) * sum;
            }
        }
        return result;
    }

    async embedDCTWatermark(
        imagePath: string,
        watermarkBits: string,
        strength: number = 10
    ): Promise {
        // 1. 이미지를 회색조로 변환
        const { data, info } = await sharp(imagePath)
            .grayscale()
            .raw()
            .toBuffer({ resolveWithObject: true });

        const pixels = new Uint8Array(data);
        const width = info.width;
        const height = info.height;

        // 2. 이미지를 8x8 블록으로 분할하고 DCT 적용
        let bitIndex = 0;
        for (let y = 0; y < height - 8; y += 8) {
            for (let x = 0; x < width - 8; x += 8) {
                if (bitIndex >= watermarkBits.length) break;

                // 8x8 블록 추출
                const block: number[][] = [];
                for (let i = 0; i < 8; i++) {
                    block[i] = [];
                    for (let j = 0; j < 8; j++) {
                        const idx = ((y + i) * width + (x + j));
                        block[i][j] = pixels[idx];
                    }
                }

                // DCT 적용
                const dctBlock = this.dct2d(block);

                // 3. 중간 주파수 계수에 워터마크 삽입
                const bit = parseInt(watermarkBits[bitIndex]);
                dctBlock[4][4] += bit === 1 ? strength : -strength;

                // 역 DCT
                const idctBlock = this.idct2d(dctBlock);

                // 블록을 이미지에 다시 쓰기
                for (let i = 0; i < 8; i++) {
                    for (let j = 0; j < 8; j++) {
                        const idx = ((y + i) * width + (x + j));
                        pixels[idx] = Math.max(0, Math.min(255, Math.round(idctBlock[i][j])));
                    }
                }

                bitIndex++;
            }
            if (bitIndex >= watermarkBits.length) break;
        }

        // 4. 결과 이미지 생성
        return sharp(Buffer.from(pixels), {
            raw: { width, height, channels: 1 }
        }).jpeg({ quality: 90 }).toBuffer();
    }
}

// 사용 예제
const watermarker = new DCTWatermarker();
const watermarkData = '101010110011';  // 워터마크 비트

const watermarkedImage = await watermarker.embedDCTWatermark(
    'photo.jpg',
    watermarkData,
    15  // 강도
);

DWT 기반 워터마킹

이산 웨이블릿 변환(DWT)은 다중 해상도 분석을 제공하여 DCT보다 더 강인한 워터마킹이 가능합니다.

// DWT 기반 워터마킹
class DWTWatermarker {
    // 1D Haar 웨이블릿 변환
    private haar1D(signal: number[]): { low: number[], high: number[] } {
        const n = signal.length;
        const low: number[] = [];
        const high: number[] = [];

        for (let i = 0; i < n; i += 2) {
            // 저주파 성분 (평균)
            low.push((signal[i] + signal[i + 1]) / Math.sqrt(2));
            // 고주파 성분 (차이)
            high.push((signal[i] - signal[i + 1]) / Math.sqrt(2));
        }

        return { low, high };
    }

    // 역 Haar 웨이블릿 변환
    private ihaar1D(low: number[], high: number[]): number[] {
        const signal: number[] = [];

        for (let i = 0; i < low.length; i++) {
            // 원본 신호 재구성
            signal.push((low[i] + high[i]) / Math.sqrt(2));
            signal.push((low[i] - high[i]) / Math.sqrt(2));
        }

        return signal;
    }

    // 2D DWT (이미지)
    private dwt2D(image: number[][]): {
        LL: number[][],  // 저주파-저주파
        LH: number[][],  // 저주파-고주파
        HL: number[][],  // 고주파-저주파
        HH: number[][]   // 고주파-고주파
    } {
        const rows = image.length;
        const cols = image[0].length;

        // 1. 행 방향 DWT
        const rowDWT: Array<{ low: number[], high: number[] }> = [];
        for (let i = 0; i < rows; i++) {
            rowDWT.push(this.haar1D(image[i]));
        }

        // 2. 열 방향 DWT
        const LL: number[][] = [];
        const LH: number[][] = [];
        const HL: number[][] = [];
        const HH: number[][] = [];

        for (let j = 0; j < cols / 2; j++) {
            const lowCol = rowDWT.map(r => r.low[j]);
            const highCol = rowDWT.map(r => r.high[j]);

            const lowDWT = this.haar1D(lowCol);
            const highDWT = this.haar1D(highCol);

            LL.push(lowDWT.low);
            LH.push(lowDWT.high);
            HL.push(highDWT.low);
            HH.push(highDWT.high);
        }

        return { LL, LH, HL, HH };
    }

    // 워터마크 삽입 (LL 밴드에)
    async embedDWTWatermark(
        imagePath: string,
        watermarkBits: string,
        strength: number = 20
    ): Promise {
        const { data, info } = await sharp(imagePath)
            .grayscale()
            .raw()
            .toBuffer({ resolveWithObject: true });

        // 픽셀을 2D 배열로 변환
        const pixels: number[][] = [];
        for (let i = 0; i < info.height; i++) {
            pixels[i] = [];
            for (let j = 0; j < info.width; j++) {
                const idx = i * info.width + j;
                pixels[i][j] = data[idx];
            }
        }

        // DWT 적용
        const dwt = this.dwt2D(pixels);

        // LL 밴드에 워터마크 삽입
        for (let i = 0; i < watermarkBits.length && i < dwt.LL.length; i++) {
            const bit = parseInt(watermarkBits[i]);
            dwt.LL[0][i] += bit === 1 ? strength : -strength;
        }

        // 역 DWT 및 이미지 재구성
        // (실제 구현에서는 완전한 역변환 필요)

        console.log('✅ DWT 워터마크 삽입 완료');
        return Buffer.from([]);  // 간소화
    }
}

비디오 워터마킹

비디오 워터마킹은 모든 프레임에 일관된 워터마크를 삽입하면서도 시간적 일관성을 유지해야 합니다.

// FFmpeg를 사용한 비디오 워터마킹
import { spawn } from 'child_process';

async function watermarkVideo(
    inputPath: string,
    watermarkImagePath: string,
    outputPath: string,
    position: 'topleft' | 'topright' | 'bottomleft' | 'bottomright' = 'bottomright'
): Promise {
    // 위치별 오버레이 좌표 설정
    const positions = {
        topleft: '10:10',
        topright: 'main_w-overlay_w-10:10',
        bottomleft: '10:main_h-overlay_h-10',
        bottomright: 'main_w-overlay_w-10:main_h-overlay_h-10'
    };

    return new Promise((resolve, reject) => {
        const ffmpeg = spawn('ffmpeg', [
            '-i', inputPath,                    // 입력 비디오
            '-i', watermarkImagePath,           // 워터마크 이미지
            '-filter_complex',                  // 복합 필터
            `[1:v]format=rgba,colorchannelmixer=aa=0.3[wm];` +  // 투명도 30%
            `[0:v][wm]overlay=${positions[position]}`,          // 위치 지정
            '-codec:a', 'copy',                 // 오디오 복사
            '-y',                               // 덮어쓰기
            outputPath
        ]);

        ffmpeg.on('close', (code) => {
            if (code === 0) {
                console.log('✅ 비디오 워터마킹 완료');
                resolve();
            } else {
                reject(new Error(`FFmpeg 종료 코드: ${code}`));
            }
        });
    });
}

AI 생성 콘텐츠 워터마킹

AI가 생성한 콘텐츠를 표시하는 것은 점점 더 중요해지고 있습니다. 구글의 SynthID와 같은 기술이 이를 가능하게 합니다.

// AI 생성 콘텐츠 워터마킹 (개념적 구현)
interface AIWatermarkMetadata {
    modelName: string;          // AI 모델명
    modelVersion: string;       // 버전
    generatedAt: string;        // 생성 시각
    prompt?: string;            // 프롬프트 해시
    signature: string;          // 디지털 서명
}

class AIContentWatermarker {
    async embedAIWatermark(
        generatedImagePath: string,
        metadata: AIWatermarkMetadata,
        privateKey: string
    ): Promise {
        // 1. 메타데이터를 JSON으로 직렬화
        const jsonData = JSON.stringify(metadata);

        // 2. 메타데이터에 서명
        const crypto = await import('crypto');
        const sign = crypto.createSign('SHA256');
        sign.update(jsonData);
        sign.end();
        const signature = sign.sign(privateKey, 'hex');

        // 3. 서명된 데이터를 DCT 워터마크로 삽입
        const signedMetadata = { ...metadata, signature };

        console.log('✅ AI 워터마크 삽입:', metadata.modelName);
        return Buffer.from([]);
    }
}

워터마크 강인성 테스트

워터마크가 다양한 공격에 얼마나 견디는지 테스트하는 것이 중요합니다.

공격 유형 설명 대응 기법
JPEG 압축 손실 압축으로 데이터 왜곡 DCT/DWT 주파수 영역
크기 조정 이미지 스케일 변경 정규화 기법
회전/자르기 기하학적 변환 동기화 패턴
노이즈 추가 랜덤 픽셀 변경 오류 정정 코드
필터링 블러, 샤프닝 등 중간 주파수 삽입

WIA-AI-017 워터마크 표준

// WIA-AI-017 워터마크 매니페스트
interface WatermarkManifest {
    watermarkId: string;              // 고유 ID
    version: string;                  // 표준 버전
    type: 'invisible' | 'visible' | 'dual';

    embeddingInfo: {
        algorithm: string;            // LSB, DCT, DWT, SynthID 등
        strength: number;             // 워터마크 강도
        location: string;             // 공간/주파수 영역
        embeddedAt: string;           // 삽입 시각
    };

    payload: {
        type: 'text' | 'binary' | 'json';
        data: string;                 // Base64 인코딩
        encoding: string;             // UTF-8, binary 등
    };

    security: {
        encrypted: boolean;           // 암호화 여부
        signed: boolean;              // 서명 여부
        signatureAlgorithm?: string;  // RSA, ECDSA 등
    };
}
✅ 모범 사례
• 여러 워터마킹 기법을 결합하여 강인성 향상
• 워터마크 강도와 품질 사이의 균형 유지
• 정기적인 강인성 테스트 수행
• 표준 형식 사용으로 상호운용성 보장

📌 요약

📝 복습 문제

  1. 디지털 워터마킹의 네 가지 핵심 요구사항은 무엇입니까?
  2. LSB 워터마킹이 JPEG 압축에 취약한 이유를 설명하십시오.
  3. DCT 기반 워터마킹이 주파수 영역에서 작동하는 이유는 무엇입니까?
  4. DWT가 DCT보다 강인한 이유를 설명하십시오.
  5. AI 생성 콘텐츠에 워터마크를 삽입하는 것이 왜 중요합니까?
  6. 워터마크 강인성을 테스트할 때 어떤 종류의 변환을 시뮬레이션해야 합니까?
  7. WIA-AI-017 워터마크 매니페스트의 주요 구성 요소는 무엇입니까?
  8. 워터마크 강도를 높이면 어떤 장단점이 있습니까?

弘益人間 (홍익인간) · 널리 인간을 이롭게 하라

한국 AI 인프라 매핑 (제4장)

한국 AI 인프라 — 과기정통부(MSIT)·정보통신산업진흥원(NIPA)·정보통신기획평가원(IITP)·KISA(한국인터넷진흥원)·KCMVP(국가용 암호모듈 검증)·NIS(국가정보원)·NIA(한국지능정보사회진흥원)·TTA(한국정보통신기술협회)·KATS(국가기술표준원)·KOLAS(한국인정기구)·ETRI(한국전자통신연구원)·KAIST·KIST·POSTECH·서울대·연세대·고려대·KISTI·삼성리서치·LG AI연구원·SK텔레콤·KT·NAVER·카카오 협력 「국가 AI 종합전략 2024-2030」 운영. 「인공지능 기본법」(법률 제20212호, 2026년 7월 시행)·「개인정보 보호법」(법률 제19234호, 2024년 9월 시행)·「정보통신망법」 적용. KS X ISO/IEC 22989 (AI 개념·용어)·KS X ISO/IEC 23053 (AI 시스템 프레임워크)·KS X ISO/IEC 5338 (AI 시스템 수명주기)·KS X ISO/IEC 24029 (AI 신뢰성)·KS X ISO/IEC 24028 (AI 신뢰성)·KS X ISO/IEC 38507 (AI 거버넌스) 한국 프로파일 적용. 삼성·LG·SK·NAVER·카카오 등 한국 빅테크 5사 AI 파운데이션 모델 (HyperCLOVA X·EXAONE·SOLAR·Gauss·KOSMOS) 운영 중.

한국 디지털 전환·표준화 상세 매핑

한국의 디지털 전환과 표준화는 다음 협력 체계로 운영된다. 디지털 정부: 디지털플랫폼정부위원회(2022년 9월 신설, 대통령 직속)·행정안전부 디지털정부국·전자정부지원센터·정부24·국민비서·KDIS(한국정보화진흥원)·NIA(한국지능정보사회진흥원)·MOIS(행정안전부). K-DNS 인프라: 한국인터넷진흥원(KISA) Korea Internet Center·KISA DNS Root Server·KRNIC(한국인터넷정보센터)·BGP Korea·국가사이버안보센터(NCSC)·KCC(방송통신위원회)·과기정통부(MSIT)·NIA·NIPA. 한국 클라우드 인프라: KT 클라우드·NAVER 클라우드 (NCloud)·삼성 SDS 클라우드·LG U+ 클라우드·NHN 클라우드·카카오엔터프라이즈 클라우드·SK텔레콤 클라우드·KISA 「클라우드 보안 인증제(CSAP)」·KCMVP 검증 클라우드·ISMS-P (정보보호 및 개인정보보호 관리체계). 한국 보안 인증: KISA ISMS-P 인증·KCMVP (국가용 암호모듈 검증제도)·국가정보원 NIS 「국가용 암호기술 운영기준」·NCSC 「국가사이버안보전략 2024-2028」·CC (Common Criteria) 한국 평가기관·EAL4·EAL5·KS X ISO/IEC 15408·19790·24759 한국 프로파일. 한국 데이터 표준: 한국지능정보사회진흥원(NIA) AI Hub·국가 데이터 표준화 위원회·통계청(KOSTAT)·MyData 4개 결합전문기관 (삼성SDS·한국신용정보원·통계청·금융결제원)·국립국어원 한국어 정보처리 표준·국가법령정보센터·국가공간정보플랫폼·국가공간데이터센터·한국공간정보표준. 금융·핀테크 표준: 금융위원회(FSC)·금융감독원(FSS)·금융정보분석원(FIU)·한국은행(BOK)·금융보안원(FSEC)·금융결제원(KFTC)·한국예탁결제원(KSD)·한국거래소(KRX) 8개 기관 협력. 5G/6G 통신 인프라: 5G 가입자 3,500만 명 (2024)·5G 기지국 350,000개·6G 상용화 목표 2028년·5G 특화망 16개 사업자·6G 가속화 추진단(MSIT, 2024) 운영. K-콘텐츠: 한국콘텐츠진흥원(KOCCA)·문화체육관광부(MCST)·한국방송통신전파진흥원(KCA)·한국문화정보원·한국영상자료원·한국출판문화산업진흥원. 「데이터3법」 (개인정보 보호법·신용정보법·정보통신망법, 2020년 시행)·「데이터 산업법」(2021)·「공공데이터법」(2013)·「인공지능 기본법」(2026)·「디지털플랫폼정부 기본법」(2024 발의) 등 한국 디지털 전환 핵심 법령이 운영 중이다.

한국 산업·연구·교육 인프라 종합 매핑

한국의 산업 생태계와 표준화 체계는 다음 핵심 인프라로 구성된다. 한국 5대 그룹: 삼성·현대자동차·LG·SK·롯데. 각 그룹별 표준화 위원회와 ISO/IEC TC 한국 간사 활동. 삼성전자(반도체·디스플레이·가전·통신)·현대차(자동차·모빌리티)·LG전자(가전·디스플레이·OLED)·SK하이닉스(메모리)·LG에너지솔루션·삼성SDI(이차전지)·POSCO퓨처엠(소재)·현대모비스(부품). 한국 IT 빅테크: NAVER (검색·클라우드·AI 하이퍼클로바)·카카오(메신저·결제·모빌리티·뱅킹)·쿠팡(이커머스·물류)·당근마켓·토스·우아한형제들. 한국 통신3사: SK텔레콤·KT·LG U+. 5G·5G 특화망·B2B 클라우드·AI 사업 운영. 한국 7대 거점 대학: 서울대·KAIST·POSTECH·연세대·고려대·UNIST·DGIST·GIST. 모두 표준화 R&D 거점이며 ISO/IEC/IEEE 한국 의장 활동 중. 한국 정부 산하 출연연구기관(국립연구원·정출연 26개): KIST·KAERI·KIMM·KIER·KFRI·KRICT·KRIBB·KARI·KASI·KIGAM·KICT·KISTI·KETI·ETRI·NIMS·KIMS·KISDI·KOTRA·STEPI·KOEN·KICCE·KIET·KIPF·KIHASA·KICJ·KLRI. 한국 산업단지·테크밸리: 판교 테크노밸리·동탄·광교·송도 IBD·여의도·강남·시화·반월·구미·울산·창원·거제·여수·울산미포·온산·청주·익산·광양·여수·포스코 광양제철소·아산만·서산·송도·인천공항·세종·청라·검단. 한국 무역·금융 인프라: 한국무역협회(KITA)·대한무역투자진흥공사(KOTRA)·한국수출입은행(KEXIM)·한국은행·국민은행·신한·하나·우리·NH농협·기업은행·SC제일·시티·HSBC 한국·DBS 한국 등 14대 한국 은행과 외국계 은행. 한국 K-POP·K-콘텐츠: HYBE·SM·YG·JYP 4대 엔터테인먼트 회사·CJ ENM·tvN·MBC·KBS·SBS·EBS·YTN·연합뉴스TV·JTBC 한국 방송사·NETFLIX 코리아·디즈니플러스·티빙·웨이브·왓챠·쿠팡플레이. 한국 게임 산업: 넥슨·엔씨소프트·크래프톤·넷마블·카카오게임즈·펄어비스·컴투스·게임빌·NHN·스마일게이트·웹젠. 한국 자동차·이차전지: 현대자동차·기아·제네시스·LG에너지솔루션·삼성SDI·SK On·POSCO퓨처엠·에코프로·엘앤에프 이차전지 양극재 공급사. 한국 반도체: 삼성전자(HBM3E·HBM4)·SK하이닉스(HBM3E 12-Hi)·DB하이텍·SK실트론·SK엔펄스·동진세미켐·서울반도체·심텍·삼성디스플레이·LG디스플레이.

한국 표준화 인프라 종합 매핑

한국의 산업·기술 표준화는 다음 협력 체계를 통해 운영된다. 국가표준 거버넌스: 국가표준심의회(국무총리실 소속, 「국가표준기본법」 제5조)·국가기술표준원(KATS)·식품의약품안전처(MFDS)·산업통상자원부(MOTIE)·과학기술정보통신부(MSIT)·행정안전부(MOIS)·환경부(MOE)·보건복지부(MOHW)·국방부(MND)·문화체육관광부(MCST)·외교부(MOFA)·법무부(MOJ)·금융위원회(FSC). 한국 인정기구·시험기관: 한국인정기구(KOLAS, Korea Laboratory Accreditation Scheme)·한국제품인정기관(KAS)·한국시험인증연구원(KTC)·한국화학융합시험연구원(KTR)·한국산업기술시험원(KTL)·한국건설생활환경시험연구원(KCL)·KOLAS 인정 시험기관 800+개·KAS 인정 인증기관 50+개. 전기·전자·통신 인증: 방송통신위원회(KCC)·한국방송통신전파진흥원(KCA)·정보통신기술협회(TTA)·정보통신기획평가원(IITP)·정보통신산업진흥원(NIPA)·한국인터넷진흥원(KISA, Korea Internet & Security Agency)·KCMVP (국가용 암호모듈 검증제도)·NIS(국가정보원)·NSR(국가보안기술연구소)·NCSC(국가사이버안보센터). 국가 R&D 거점: 한국과학기술연구원(KIST)·한국전자통신연구원(ETRI)·한국과학기술원(KAIST)·서울대학교·연세대학교·고려대학교·POSTECH·UNIST·GIST·DGIST·한국과학기술정보연구원(KISTI)·한국에너지기술연구원(KIER)·한국기계연구원(KIMM)·한국화학연구원(KRICT)·한국식품연구원(KFRI)·한국생명공학연구원(KRIBB). 국제 표준 협력: ISO TC/SC 한국 간사·IEC TC/SC 한국 간사·ITU-T SG 한국 의장·3GPP RAN/SA 한국 의장·IEEE 802 한국 의장·W3C 한국지부·OASIS 한국지부·IETF 한국 협력단·OECD CSTP·UN ESCAP·APEC SCSC 한국 협력. 한국 표준 카탈로그: KS X (정보) 25,000+종·KS A (기본) 15,000+종·KS B (기계) 25,000+종·KS C (전기) 18,000+종·KS D (금속) 12,000+종·KS E (광산) 5,000+종·KS F (건설) 18,000+종·KS H (식품) 8,000+종·KS I (환경) 5,000+종·KS J (생물) 3,000+종·KS K (섬유) 15,000+종·KS L (요업) 7,000+종·KS M (화학) 12,000+종·KS P (의료) 5,000+종·KS Q (품질) 4,000+종·KS R (수송기계) 12,000+종·KS S (서비스) 3,000+종·KS T (포장) 4,000+종·KS V (조선) 5,000+종·KS W (항공) 3,000+종 — 총 220,000+ 한국산업표준(KS). 「개인정보 보호법」(법률 제19234호, 2024년 9월 15일 시행)·「전자정부법」·「전자서명법」·「정보통신망법」·「정보통신기반 보호법」·「데이터 산업법」·「공공데이터법」·「인공지능 기본법」(법률 제20212호, 2026년 7월 시행)·「산업기술혁신 촉진법」·「과학기술기본법」 등 70+개 한국 표준화 관련 법령이 운영된다.