{"id":2663,"date":"2026-10-24T08:52:49","date_gmt":"2026-10-24T08:52:49","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2663"},"modified":"2026-10-24T08:52:49","modified_gmt":"2026-10-24T08:52:49","slug":"%ec%95%94%ed%98%b8%ed%95%99-%ea%b8%b0%ec%b4%88-hash-%eb%b9%84%eb%b0%80%eb%b2%88%ed%98%b8-%ed%95%b4%ec%8b%b1-salt-%eb%8c%80%ec%b9%ad%ed%82%a4%ec%99%80-%eb%b9%84%eb%8c%80%ec%b9%ad%ed%82%a4","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2663","title":{"rendered":"\uc554\ud638\ud559 \uae30\ucd08 #Hash, \ube44\ubc00\ubc88\ud638 \ud574\uc2f1, Salt, \ub300\uce6d\ud0a4\uc640 \ube44\ub300\uce6d\ud0a4, \ub514\uc9c0\ud138 \uc11c\uba85"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\ubc31\uc5d4\ub4dc \uc11c\ubc84\ub294 \uc0ac\uc6a9\uc790 \ube44\ubc00\ubc88\ud638, \uc778\uc99d \ud1a0\ud070, \uac1c\uc778\uc815\ubcf4, \uac8c\uc784 \uc7ac\ud654, \uacb0\uc81c \uc815\ubcf4 \ub4f1 \ub2e4\uc591\ud55c \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud55c\ub2e4. \uc774 \ub370\uc774\ud130\ub97c \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud558\ub824\uba74 \uc554\ud638\ud559(Cryptography)\uc758 \uae30\ubcf8 \uc6d0\ub9ac\ub97c \uc774\ud574\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud559\uc740 \ub2e8\uc21c\ud788 \ub370\uc774\ud130\ub97c \uc554\ud638\ud654\ud558\ub294 \uae30\uc220\uc774 \uc544\ub2c8\ub2e4. \ub370\uc774\ud130\uc758 \uae30\ubc00\uc131, \ubb34\uacb0\uc131, \uc778\uc99d, \ubd80\uc778 \ubc29\uc9c0 \ub4f1\uc744 \uc81c\uacf5\ud558\ub294 \ubcf4\uc548 \uae30\uc220\uc758 \uc9d1\ud569\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc790\uac00 \ubc18\ub4dc\uc2dc \uc54c\uc544\uc57c \ud560 \ub2e4\uc74c \uac1c\ub150\uc744 \uc815\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hash\uc640 \uc554\ud638\ud654\uc758 \ucc28\uc774<\/li>\n\n\n\n<li>\ube44\ubc00\ubc88\ud638 \ud574\uc2f1\uacfc \uc548\uc804\ud55c \uc800\uc7a5 \ubc29\uc2dd<\/li>\n\n\n\n<li>Salt\uc640 Hash\uc758 \uad00\uacc4<\/li>\n\n\n\n<li>\ub300\uce6d\ud0a4\uc640 \ube44\ub300\uce6d\ud0a4 \uc554\ud638\ud654<\/li>\n\n\n\n<li>\ub514\uc9c0\ud138 \uc11c\uba85\uacfc \ud0a4 \uad00\ub9ac<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Hash\uc640 \uc554\ud638\ud654\uc758 \ucc28\uc774<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hash\ub780?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\uc2dc(Hash)\ub294 \uc784\uc758\uc758 \uae38\uc774\ub97c \uac00\uc9c4 \uc785\ub825 \ub370\uc774\ud130\ub97c \uace0\uc815\ub41c \uae38\uc774\uc758 \ucd9c\ub825\uac12\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \ud568\uc218\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { createHash } from \"node:crypto\";\n\nconst input = \"hello world\";\n\nconst hash = createHash(\"sha256\")\n  .update(input)\n  .digest(\"hex\");\n\nconsole.log(hash);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">SHA-256\uc744 \uc0ac\uc6a9\ud558\uba74 \uc785\ub825 \ub370\uc774\ud130\uc758 \ud06c\uae30\uc640 \uad00\uacc4\uc5c6\uc774 256\ube44\ud2b8\uc758 \ud574\uc2dc\uac12\uc774 \uc0dd\uc131\ub41c\ub2e4. 16\uc9c4\uc218 \ubb38\uc790\uc5f4\ub85c \ud45c\ud604\ud558\uba74 64\uc790\ub9ac\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\uc2dc \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud2b9\uc131\uc744 \uac00\uc9c4\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\uacb0\uc815\uc131<\/strong>: \uac19\uc740 \uc785\ub825\uc5d0\ub294 \ud56d\uc0c1 \uac19\uc740 \ucd9c\ub825\uc774 \uc0dd\uc131\ub41c\ub2e4.<\/li>\n\n\n\n<li><strong>\uace0\uc815 \uae38\uc774 \ucd9c\ub825<\/strong>: \uc785\ub825 \ud06c\uae30\uc640 \uad00\uacc4\uc5c6\uc774 \uc815\ud574\uc9c4 \uae38\uc774\uc758 \uacb0\uacfc\ub97c \ubc18\ud658\ud55c\ub2e4.<\/li>\n\n\n\n<li><strong>\uc5ed\uc0b0\uc758 \uc5b4\ub824\uc6c0<\/strong>: \ud574\uc2dc\uac12\ub9cc\uc73c\ub85c \uc6d0\ubcf8 \uc785\ub825\uc744 \ubcf5\uc6d0\ud558\uae30 \uc5b4\ub835\ub2e4.<\/li>\n\n\n\n<li><strong>\ucda9\ub3cc \uc800\ud56d\uc131<\/strong>: \uc11c\ub85c \ub2e4\ub978 \uc785\ub825\uc774 \uac19\uc740 \ud574\uc2dc\uac12\uc744 \ub9cc\ub4dc\ub294 \ucda9\ub3cc\uc744 \ucc3e\uae30 \uc5b4\ub824\uc6cc\uc57c \ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\uc2dc\ub294 \uc6d0\ubcf8 \ub370\uc774\ud130\ub97c \ubcf5\uc6d0\ud558\uae30 \uc704\ud55c \uae30\ub2a5\uc774 \uc544\ub2c8\ub2e4. \uc785\ub825\uac12\uc758 \uc9c0\ubb38\uc744 \uc0dd\uc131\ud558\ub294 \ub370 \ubaa9\uc801\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8, \ud574\uc2dc\uac12\ub9cc\uc73c\ub85c \uc6d0\ubcf8\uc744 \ubcf5\uc6d0\ud558\uae30 \uc5b4\ub835\ub2e4\ub294 \uc0ac\uc2e4\uc774 \ubaa8\ub4e0 \uc785\ub825\uac12\uc744 \uc548\uc804\ud558\uac8c \ubcf4\ud638\ud55c\ub2e4\ub294 \uc758\ubbf8\ub294 \uc544\ub2c8\ub2e4. \ube44\ubc00\ubc88\ud638\ucc98\ub7fc \ud6c4\ubcf4\uac00 \uc81c\ud55c\ub41c \ub370\uc774\ud130\ub294 \uac00\ub2a5\ud55c \uac12\uc744 \ubc18\ubcf5\ud574\uc11c \ud574\uc2f1\ud558\uc5ec \ucd94\uce21\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc554\ud638\ud654(Encryption)\ub780?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud654\ub294 \ud3c9\ubb38(Plaintext)\uc744 \uc554\ud638\ubb38(Ciphertext)\uc73c\ub85c \ubcc0\ud658\ud558\uc5ec \uad8c\ud55c\uc774 \uc5c6\ub294 \uc0ac\ub78c\uc774 \ub0b4\uc6a9\uc744 \uc54c\uc544\ubcfc \uc218 \uc5c6\ub3c4\ub85d \ud558\ub294 \uae30\uc220\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc73c\ub85c \ubcf5\ud638\ud654\uc5d0 \ud544\uc694\ud55c \ud0a4\uac00 \uc874\uc7ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud3c9\ubb38: hello world\n       |\n       | \uc554\ud638\ud654 + \uc554\ud638\ud654 \ud0a4\n       v\n\uc554\ud638\ubb38: 8f3a... (\uc608\uc2dc)\n       |\n       | \ubcf5\ud638\ud654 + \ubcf5\ud638\ud654 \ud0a4\n       v\n\ud3c9\ubb38: hello world<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud654\ub294 \uc801\uc808\ud55c \ud0a4\ub97c \uc774\uc6a9\ud558\uba74 \uc6d0\ubcf8 \ub370\uc774\ud130\ub97c \ubcf5\uc6d0\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0\uc11c \ud574\uc2dc\uc640 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hash\uc640 \uc554\ud638\ud654 \ube44\uad50<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uad6c\ubd84<\/th><th>Hash<\/th><th>\uc554\ud638\ud654<\/th><\/tr><tr><td>\uc8fc\uc694 \ubaa9\uc801<\/td><td>\ubb34\uacb0\uc131 \uac80\uc99d, \uc9c0\ubb38 \uc0dd\uc131<\/td><td>\uae30\ubc00\uc131 \ubcf4\ud638<\/td><\/tr><tr><td>\uc6d0\ubcf8 \ubcf5\uc6d0<\/td><td>\uc77c\ubc18\uc801\uc73c\ub85c \ubd88\uac00\ub2a5<\/td><td>\uc801\uc808\ud55c \ud0a4\ub85c \uac00\ub2a5<\/td><\/tr><tr><td>\ud0a4 \uc0ac\uc6a9<\/td><td>\uc77c\ubc18 \ud574\uc2dc\ub294 \ubd88\ud544\uc694<\/td><td>\uc77c\ubc18\uc801\uc73c\ub85c \ud544\uc694<\/td><\/tr><tr><td>\ub300\ud45c \uc54c\uace0\ub9ac\uc998<\/td><td>SHA-256, SHA-3<\/td><td>AES, RSA, ChaCha20<\/td><\/tr><tr><td>\ub300\ud45c \uc0ac\uc6a9 \uc0ac\ub840<\/td><td>\ud30c\uc77c \ubb34\uacb0\uc131 \uac80\uc99d, \ube44\ubc00\ubc88\ud638 \uac80\uc99d<\/td><td>\uac1c\uc778\uc815\ubcf4 \ubcf4\ud638, \ud1b5\uc2e0 \ub370\uc774\ud130 \ubcf4\ud638<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c \uc911\uc694\ud55c \uc608\uc678\uac00 \uc788\ub2e4. HMAC\uc740 \ube44\ubc00 \ud0a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uba54\uc2dc\uc9c0 \uc778\uc99d \ucf54\ub4dc\uc774\uba70, \uc77c\ubc18\uc801\uc778 \ud574\uc2dc \ud568\uc218\uc640 \uad6c\ubd84\ud574\uc57c \ud55c\ub2e4. \ub610\ud55c \uc554\ud638\ud654 \uc54c\uace0\ub9ac\uc998 \uc911\uc5d0\uc11c\ub3c4 AES-GCM\ucc98\ub7fc \uc554\ud638\ud654\uc640 \ubb34\uacb0\uc131 \uac80\uc99d\uc744 \ud568\uaed8 \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc5b8\uc81c \ubb34\uc5c7\uc744 \uc0ac\uc6a9\ud574\uc57c \ud558\ub294\uac00?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc0ac\uc6a9\uc790\uc758 \ube44\ubc00\ubc88\ud638\ub97c \uc800\uc7a5\ud55c\ub2e4\uba74: Argon2id, scrypt, bcrypt \ub4f1\uc758 \ube44\ubc00\ubc88\ud638 \ud574\uc2f1 \uc54c\uace0\ub9ac\uc998\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uac1c\uc778\uc815\ubcf4\ub97c \uc554\ud638\ud654\ud574 \uc800\uc7a5\ud55c\ub2e4\uba74: AES-GCM \uac19\uc740 \uc778\uc99d\ub41c \uc554\ud638\ud654 \ubc29\uc2dd\uc744 \uace0\ub824\ud55c\ub2e4.<\/li>\n\n\n\n<li>\uc804\uc1a1\ub41c \ub370\uc774\ud130\uac00 \ubcc0\uc870\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4\uba74: \ub514\uc9c0\ud138 \uc11c\uba85, HMAC \ub610\ub294 \uc778\uc99d\ub41c \uc554\ud638\ud654 \ub4f1 \uc704\ud611 \ubaa8\ub378\uc5d0 \ub9de\ub294 \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n\n\n\n<li>\ud30c\uc77c\uc758 \ud574\uc2dc\ub97c \ube44\uad50\ud55c\ub2e4\uba74: SHA-256 \ub4f1\uc758 \uc554\ud638\ud559\uc801 \ud574\uc2dc\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8\uc21c SHA-256\uc744 \ube44\ubc00\ubc88\ud638 \uc800\uc7a5\uc5d0 \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc548\uc804\ud55c \uc124\uacc4\uac00 \uc544\ub2c8\ub2e4. \ube44\ubc00\ubc88\ud638 \ud574\uc2f1\uc5d0\ub294 \ubcc4\ub3c4\uc758 \uc54c\uace0\ub9ac\uc998\uc774 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ube44\ubc00\ubc88\ud638 \ud574\uc2f1<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ube44\ubc00\ubc88\ud638\ub97c \ud3c9\ubb38\uc73c\ub85c \uc800\uc7a5\ud558\uba74 \uc548 \ub418\ub294 \uc774\uc720<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c\uacfc \uac19\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad6c\uc870\ub97c \uac00\uc815\ud574 \ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users\n--------------------------------\nid    username    password\n1     user1       mypassword123\n2     user2       qwer1234<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \uc720\ucd9c\ub418\uba74 \uacf5\uaca9\uc790\ub294 \uc0ac\uc6a9\uc790\uc758 \ube44\ubc00\ubc88\ud638\ub97c \uc989\uc2dc \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790\uac00 \ub2e4\ub978 \uc11c\ube44\uc2a4\uc5d0\uc11c\ub3c4 \uac19\uc740 \ube44\ubc00\ubc88\ud638\ub97c \uc0ac\uc6a9\ud588\ub2e4\uba74 \ud53c\ud574\uac00 \ub2e4\ub978 \uc11c\ube44\uc2a4\ub85c \ud655\uc0b0\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ube44\ubc00\ubc88\ud638\ub294 \ud3c9\ubb38\uc73c\ub85c \uc800\uc7a5\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub807\ub2e4\uace0 \uc77c\ubc18\uc801\uc778 SHA-256\uc73c\ub85c\ub9cc \ubcc0\ud658\ud558\uc5ec \uc800\uc7a5\ud558\ub294 \uac83\ub3c4 \ucda9\ubd84\ud558\uc9c0 \uc54a\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { createHash } from \"node:crypto\";\n\nconst password = \"mypassword123\";\n\nconst hash = createHash(\"sha256\")\n  .update(password)\n  .digest(\"hex\");<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704 \ucf54\ub4dc\ub294 \ube44\ubc00\ubc88\ud638\ub97c \ud574\uc2dc\uac12\uc73c\ub85c \ubcc0\ud658\ud558\uc9c0\ub9cc, \uacf5\uaca9\uc790\ub294 \ud754\ud788 \uc0ac\uc6a9\ub418\ub294 \ube44\ubc00\ubc88\ud638\ub97c \ub300\ub7c9\uc73c\ub85c \ud574\uc2f1\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ud574\uc2dc\uac12\uacfc \ube44\uad50\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SHA-256\uc740 \ube60\ub978 \ud574\uc2dc \ud568\uc218\ub2e4. \uc77c\ubc18\uc801\uc778 \ub370\uc774\ud130 \ubb34\uacb0\uc131 \uac80\uc99d\uc5d0\ub294 \uc7a5\uc810\uc774\uc9c0\ub9cc, \ube44\ubc00\ubc88\ud638 \uacf5\uaca9\uc5d0\uc11c\ub294 \uacf5\uaca9\uc790\uac00 \ub9ce\uc740 \ud6c4\ubcf4\ub97c \ube60\ub974\uac8c \uc2dc\ud5d8\ud560 \uc218 \uc788\ub2e4\ub294 \ub2e8\uc810\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ube44\ubc00\ubc88\ud638 \uc804\uc6a9 \ud574\uc2f1 \uc54c\uace0\ub9ac\uc998<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ubc00\ubc88\ud638 \uc800\uc7a5\uc5d0\ub294 \uc758\ub3c4\uc801\uc73c\ub85c \uacc4\uc0b0 \ube44\uc6a9\uc744 \ub192\uc774\uac70\ub098 \uba54\ubaa8\ub9ac\ub97c \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uacc4\ub41c \uc54c\uace0\ub9ac\uc998\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc54c\uace0\ub9ac\uc998\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uc54c\uace0\ub9ac\uc998<\/th><th>\ud2b9\uc9d5<\/th><\/tr><tr><td>Argon2id<\/td><td>\uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uacfc \uacc4\uc0b0 \ube44\uc6a9\uc744 \uc870\uc808\ud560 \uc218 \uc788\uc73c\uba70, \uc77c\ubc18\uc801\uc73c\ub85c \uc6b0\uc120 \uace0\ub824\ud560 \uc120\ud0dd\uc9c0<\/td><\/tr><tr><td>scrypt<\/td><td>\uba54\ubaa8\ub9ac \uc9d1\uc57d\uc801\uc73c\ub85c \uc124\uacc4\ub41c \ube44\ubc00\ubc88\ud638 \ud574\uc2f1 \uc54c\uace0\ub9ac\uc998<\/td><\/tr><tr><td>bcrypt<\/td><td>\uc624\ub7ab\ub3d9\uc548 \ub110\ub9ac \uc0ac\uc6a9\ub41c \ube44\ubc00\ubc88\ud638 \ud574\uc2f1 \uc54c\uace0\ub9ac\uc998<\/td><\/tr><tr><td>PBKDF2<\/td><td>\ubc18\ubcf5\uc801\uc778 \ud0a4 \uc720\ub3c4 \uc5f0\uc0b0\uc744 \uc0ac\uc6a9\ud558\uba70, \ud658\uacbd\uacfc \uc815\ucc45\uc5d0 \ub530\ub77c \ud65c\uc6a9 \uac00\ub2a5<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0c8\ub85c\uc6b4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 \uc77c\ubc18\uc801\uc73c\ub85c Argon2id\ub97c \uc6b0\uc120 \uace0\ub824\ud560 \uc218 \uc788\ub2e4. \ub2e4\ub9cc \uc2e4\uc81c \uc54c\uace0\ub9ac\uc998\uacfc \ube44\uc6a9 \ub9e4\uac1c\ubcc0\uc218\ub294 \uc6b4\uc601 \ud658\uacbd\uc758 \uc131\ub2a5, \ubcf4\uc548 \uc815\ucc45, \ub77c\uc774\ube0c\ub7ec\ub9ac \uc9c0\uc6d0\uc744 \uace0\ub824\ud558\uc5ec \uacb0\uc815\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Node.js\uc5d0\uc11c Argon2id \uc0ac\uc6a9\ud558\uae30<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uba3c\uc800 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install argon2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ubc00\ubc88\ud638\ub97c \ud574\uc2f1\ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import argon2 from \"argon2\";\n\nasync function hashPassword(\n  password: string\n): Promise&lt;string&gt; {\n  return argon2.hash(password, {\n    type: argon2.argon2id,\n    memoryCost: 19456,\n    timeCost: 2,\n    parallelism: 1,\n  });\n}\n\nasync function verifyPassword(\n  password: string,\n  passwordHash: string\n): Promise&lt;boolean&gt; {\n  return argon2.verify(passwordHash, password);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704 \ub9e4\uac1c\ubcc0\uc218\ub294 \uc608\uc2dc\uc774\uba70 \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uc5d0 \uc801\ud569\ud55c \ubcf4\ud3b8\uc801 \uad8c\uc7a5\uac12\uc740 \uc544\ub2c8\ub2e4. \uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c \uc2e4\uc81c \ub85c\uadf8\uc778 \ubd80\ud558\ub97c \uce21\uc815\ud558\uace0 \ubcf4\uc548 \uc694\uad6c\uc0ac\ud56d\uc5d0 \ub9de\ucdb0 \uc870\uc815\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c\uadf8\uc778 \uac80\uc99d\uc740 \ub2e4\uc74c\ucc98\ub7fc \uc9c4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const passwordHash = await hashPassword(\n  \"mypassword123\"\n);\n\n\/\/ \ud68c\uc6d0\uac00\uc785 \uc2dc passwordHash\ub97c DB\uc5d0 \uc800\uc7a5\ud55c\ub2e4.\n\n\/\/ \ub85c\uadf8\uc778 \uc2dc DB\uc5d0\uc11c \uac00\uc838\uc628 \ud574\uc2dc\uac12\uc744 \uc0ac\uc6a9\ud55c\ub2e4.\nconst isValid = await verifyPassword(\n  \"mypassword123\",\n  passwordHash\n);\n\nif (!isValid) {\n  throw new Error(\"\uc774\uba54\uc77c \ub610\ub294 \ube44\ubc00\ubc88\ud638\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Argon2\ub294 \uc54c\uace0\ub9ac\uc998\uacfc \ub9e4\uac1c\ubcc0\uc218, Salt \ub4f1\uc758 \uc815\ubcf4\ub97c \uc778\ucf54\ub529\ub41c \uacb0\uacfc\uc5d0 \ud3ec\ud568\ud560 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c \uc77c\ubc18\uc801\uc73c\ub85c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c Salt\ub97c \ubcc4\ub3c4\ub85c \uc0dd\uc131\ud558\uace0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub530\ub85c \uc800\uc7a5\ud560 \ud544\uc694\uac00 \uc5c6\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ube44\ubc00\ubc88\ud638 \uc800\uc7a5 \uad6c\uc870<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud68c\uc6d0\uac00\uc785\n  |\n  v\n\ube44\ubc00\ubc88\ud638 \uc785\ub825\n  |\n  v\nArgon2id \ud574\uc2f1\n  |\n  v\n\ud574\uc2dc \ubb38\uc790\uc5f4 \uc800\uc7a5\n  |\n  v\n\ub370\uc774\ud130\ubca0\uc774\uc2a4\n\n\ub85c\uadf8\uc778\n  |\n  v\n\ube44\ubc00\ubc88\ud638 \uc785\ub825\n  |\n  v\n\uc800\uc7a5\ub41c \ud574\uc2dc\uc640 \uac80\uc99d\n  |\n  +-- \uc77c\uce58 --&gt; \uc778\uc99d \uc131\uacf5\n  |\n  +-- \ubd88\uc77c\uce58 --&gt; \uc778\uc99d \uc2e4\ud328<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uc694\ud55c \uc6d0\uce59\uc740 <strong>\ube44\ubc00\ubc88\ud638\ub97c \ubcf5\ud638\ud654\ud558\uc5ec \ube44\uad50\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c, \uc785\ub825\ub41c \ube44\ubc00\ubc88\ud638\uac00 \uc800\uc7a5\ub41c \ud574\uc2dc\uc640 \uc77c\uce58\ud558\ub294\uc9c0 \uac80\uc99d\ud55c\ub2e4\ub294 \uac83<\/strong>\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Salt\uc640 Hash<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Salt\ub780?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\ub294 \ube44\ubc00\ubc88\ud638\ub97c \ud574\uc2f1\ud558\uae30 \uc804\uc5d0 \ud568\uaed8 \uc0ac\uc6a9\ud558\ub294 \uc784\uc758\uc758 \uac12\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \ube44\ubc00\ubc88\ud638\ub77c\ub3c4 \uc11c\ub85c \ub2e4\ub978 Salt\ub97c \uc0ac\uc6a9\ud558\uba74 \uc11c\ub85c \ub2e4\ub978 \ud574\uc2dc\uac12\uc774 \uc0dd\uc131\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ube44\ubc00\ubc88\ud638: password123\n\n\uc0ac\uc6a9\uc790 A\npassword123 + Salt A\n        |\n        v\n      Hash A\n\n\uc0ac\uc6a9\uc790 B\npassword123 + Salt B\n        |\n        v\n      Hash B<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub450 \uc0ac\uc6a9\uc790\uac00 \uac19\uc740 \ube44\ubc00\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 \ud574\uc2dc\uac12\uc774 \uac19\uc9c0 \uc54a\ub3c4\ub85d \ub9cc\ub4dc\ub294 \uac83\uc774 \ud575\uc2ec\uc774\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Salt\uac00 \ud544\uc694\ud55c \uc774\uc720<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\uac00 \uc5c6\ub2e4\uba74 \uac19\uc740 \ube44\ubc00\ubc88\ud638\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \uac19\uc740 \ud574\uc2dc\uac12\uc744 \ub9cc\ub4e0\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>password123 -&gt; abc123\npassword123 -&gt; abc123\npassword123 -&gt; abc123<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacf5\uaca9\uc790\ub294 \uc774\ub7ec\ud55c \ubc18\ubcf5 \ud328\ud134\uc744 \ud1b5\ud574 \uac19\uc740 \ube44\ubc00\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\ub294 \uacc4\uc815\uc744 \ucd94\uc815\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \ubbf8\ub9ac \uacc4\uc0b0\ud574 \ub454 \ud574\uc2dc\uac12 \ubaa9\ub85d\uc778 \ub808\uc778\ubcf4\uc6b0 \ud14c\uc774\ube14(Rainbow Table)\uc744 \ud65c\uc6a9\ud558\uc5ec \ube44\ubc00\ubc88\ud638\ub97c \ucd94\uce21\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\ub97c \uc801\uc6a9\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub2ec\ub77c\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>password123 + saltA -&gt; hashA\npassword123 + saltB -&gt; hashB\npassword123 + saltC -&gt; hashC<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 \ub3d9\uc77c\ud55c \ube44\ubc00\ubc88\ud638\uc5d0 \ub300\ud55c \ud574\uc2dc\uac12\uc758 \ubc18\ubcf5\uc744 \ubc29\uc9c0\ud558\uace0, \uc0ac\uc804 \uacc4\uc0b0\ub41c \ud574\uc2dc \ubaa9\ub85d\uc744 \uc7ac\uc0ac\uc6a9\ud558\uae30 \uc5b4\ub835\uac8c \ub9cc\ub4e0\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Salt\ub294 \ube44\ubc00\uc774\uc5b4\uc57c \ud558\ub294\uac00?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\ub294 \ube44\ubc00\ubc88\ud638 \ud574\uc2dc\uc640 \ud568\uaed8 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc800\uc7a5\ud574\ub3c4 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\uc758 \ubaa9\uc801\uc740 \uacf5\uaca9\uc790\uac00 \uac12\uc744 \uc54c \uc218 \uc5c6\uac8c \ub9cc\ub4dc\ub294 \uac83\uc774 \uc544\ub2c8\ub77c, \uc0ac\uc6a9\uc790\ubcc4 \ud574\uc2dc \uacb0\uacfc\ub97c \ub2e4\ub974\uac8c \ub9cc\ub4dc\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users\n--------------------------------------------------\nid    username    password_hash\n1     user1       $argon2id$...saltA...hashA\n2     user2       $argon2id$...saltB...hashB<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c Argon2 \uc778\ucf54\ub529 \ubb38\uc790\uc5f4\uc758 \ud615\uc2dd\uacfc \uad6c\uc131\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ub530\ub77c \ub2e4\ub97c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\uc640 \ubcc4\uac1c\ub85c, \ube44\ubc00\ubc88\ud638 \ud574\uc2dc\ub97c \uacc4\uc0b0\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc11c\ubc84 \uce21 \ube44\ubc00\uac12\uc778 <strong>Pepper<\/strong>\ub97c \ucd94\uac00\ub85c \uace0\ub824\ud560 \uc218\ub3c4 \uc788\ub2e4. Pepper\ub294 Salt\uc640 \ub2ec\ub9ac \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc678\ubd80\uc758 \ube44\ubc00 \uad00\ub9ac \uc2dc\uc2a4\ud15c \ub4f1\uc5d0 \ubcf4\uad00\ud574\uc57c \ud55c\ub2e4. \ub2e4\ub9cc Pepper\uc758 \uc801\uc6a9 \ubc29\uc2dd\uacfc \ud0a4 \uad50\uccb4 \uc804\ub7b5\uc740 \ubcc4\ub3c4\ub85c \uc124\uacc4\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Salt\uc640 Pepper\uc758 \ucc28\uc774<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uad6c\ubd84<\/th><th>Salt<\/th><th>Pepper<\/th><\/tr><tr><td>\ubaa9\uc801<\/td><td>\uc0ac\uc6a9\uc790\ubcc4 \ud574\uc2dc \uacb0\uacfc \ucc28\ubcc4\ud654<\/td><td>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc720\ucd9c \uc2dc \ucd94\uac00 \ubc29\uc5b4<\/td><\/tr><tr><td>\uc0ac\uc6a9\uc790\ubcc4 \uac12<\/td><td>\uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\uc790\ub9c8\ub2e4 \ub2e4\ub984<\/td><td>\ubcf4\ud1b5 \uc5ec\ub7ec \uc0ac\uc6a9\uc790\uc5d0\uac8c \uacf5\ud1b5 \uc801\uc6a9<\/td><\/tr><tr><td>\uacf5\uac1c \uc5ec\ubd80<\/td><td>\uacf5\uac1c \uac00\ub2a5<\/td><td>\ube44\ubc00\ub85c \uad00\ub9ac<\/td><\/tr><tr><td>\uc800\uc7a5 \uc704\uce58<\/td><td>\ud574\uc2dc\uc640 \ud568\uaed8 \uc800\uc7a5 \uac00\ub2a5<\/td><td>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc678\ubd80\uc758 \ube44\ubc00 \uc800\uc7a5\uc18c \ub4f1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\ub294 \ube44\ubc00\ubc88\ud638 \ud574\uc2f1 \uc54c\uace0\ub9ac\uc998\uacfc \ud568\uaed8 \uc790\ub3d9\uc73c\ub85c \ucc98\ub9ac\ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4. \uc9c1\uc811 \uad6c\ud604\ud558\uae30\ubcf4\ub2e4\ub294 \uac80\uc99d\ub41c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \ud3b8\uc774 \uc548\uc804\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ub300\uce6d\ud0a4\uc640 \ube44\ub300\uce6d\ud0a4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud654 \ubc29\uc2dd\uc740 \ud0a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uad6c\uc870\uc5d0 \ub530\ub77c \ub300\uce6d\ud0a4 \uc554\ud638\ud654\uc640 \ube44\ub300\uce6d\ud0a4 \uc554\ud638\ud654\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ub300\uce6d\ud0a4 \uc554\ud638\ud654(Symmetric Encryption)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\uce6d\ud0a4 \uc554\ud638\ud654\ub294 \uc554\ud638\ud654\uc640 \ubcf5\ud638\ud654\uc5d0 \uac19\uc740 \ube44\ubc00 \ud0a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud3c9\ubb38\n  |\n  | \uc554\ud638\ud654 + \ube44\ubc00 \ud0a4 K\n  v\n\uc554\ud638\ubb38\n  |\n  | \ubcf5\ud638\ud654 + \ub3d9\uc77c\ud55c \ube44\ubc00 \ud0a4 K\n  v\n\ud3c9\ubb38<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc54c\uace0\ub9ac\uc998\uc740 AES\uc640 ChaCha20\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc7a5\uc810\uc740 \ub300\uccb4\ub85c \ube60\ub974\uace0 \ub300\ub7c9\uc758 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30\uc5d0 \uc801\ud569\ud558\ub2e4\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8\uc810\uc740 \ud0a4\ub97c \uc548\uc804\ud558\uac8c \uacf5\uc720\ud558\uace0 \ubcf4\uad00\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc774\ub2e4. \uacf5\uaca9\uc790\uac00 \ud0a4\ub97c \ud68d\ub4dd\ud558\uba74 \ud574\ub2f9 \ud0a4\ub85c \ubcf4\ud638\ub418\ub294 \ub370\uc774\ud130\ub97c \ubcf5\ud638\ud654\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\uc5d0\uc11c AES-256-GCM\uc744 \uc0ac\uc6a9\ud558\ub294 \uc608\uc2dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import {\n  createCipheriv,\n  createDecipheriv,\n  randomBytes,\n} from \"node:crypto\";\n\nconst key = randomBytes(32); \/\/ 256\ube44\ud2b8 \ud0a4\nconst iv = randomBytes(12);  \/\/ GCM\uc5d0\uc11c \ud754\ud788 \uc0ac\uc6a9\ud558\ub294 IV \ud06c\uae30\n\nfunction encrypt(plaintext: string) {\n  const cipher = createCipheriv(\n    \"aes-256-gcm\",\n    key,\n    iv\n  );\n\n  const ciphertext = Buffer.concat(&#91;\n    cipher.update(plaintext, \"utf8\"),\n    cipher.final(),\n  ]);\n\n  const authTag = cipher.getAuthTag();\n\n  return {\n    iv: iv.toString(\"base64\"),\n    ciphertext: ciphertext.toString(\"base64\"),\n    authTag: authTag.toString(\"base64\"),\n  };\n}\n\nfunction decrypt(data: {\n  iv: string;\n  ciphertext: string;\n  authTag: string;\n}) {\n  const decipher = createDecipheriv(\n    \"aes-256-gcm\",\n    key,\n    Buffer.from(data.iv, \"base64\")\n  );\n\n  decipher.setAuthTag(\n    Buffer.from(data.authTag, \"base64\")\n  );\n\n  const plaintext = Buffer.concat(&#91;\n    decipher.update(\n      Buffer.from(data.ciphertext, \"base64\")\n    ),\n    decipher.final(),\n  ]);\n\n  return plaintext.toString(\"utf8\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c\ub294 \uc554\ud638\ud654\ud560 \ub54c\ub9c8\ub2e4 \uc0c8\ub85c\uc6b4 IV\ub97c \uc0dd\uc131\ud558\uace0, \uac19\uc740 \ud0a4\uc5d0\uc11c IV\uac00 \uc911\ubcf5\ub418\uc9c0 \uc54a\ub3c4\ub85d \uad00\ub9ac\ud574\uc57c \ud55c\ub2e4. GCM \uc778\uc99d \ud0dc\uadf8 \uac80\uc99d\uc5d0 \uc2e4\ud328\ud558\uba74 \ubcf5\ud638\ud654\ub97c \uac70\ubd80\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc704 \uc608\uc2dc\uc758 <code>key<\/code>\ub294 \ud504\ub85c\uc138\uc2a4 \uba54\ubaa8\ub9ac\uc5d0 \uc0dd\uc131\ud55c \ub370\ubaa8\uc6a9 \ud0a4\ub2e4. \uc11c\ubc84\ub97c \uc7ac\uc2dc\uc791\ud558\uba74 \ud0a4\uac00 \ubc14\ub00c\ubbc0\ub85c \uae30\uc874 \uc554\ud638\ubb38\uc744 \ubcf5\ud638\ud654\ud560 \uc218 \uc5c6\ub2e4. \uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c\ub294 \ud0a4\ub97c \uc548\uc804\ud558\uac8c \ubcf4\uad00\ud558\uace0 \ubcf5\uad6c\ud560 \uc218 \uc788\ub294 \ubcc4\ub3c4 \ud0a4 \uad00\ub9ac \uccb4\uacc4\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ube44\ub300\uce6d\ud0a4 \uc554\ud638\ud654(Asymmetric Encryption)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ub300\uce6d\ud0a4 \uc554\ud638\ud654\ub294 \uc11c\ub85c \ub2e4\ub978 \ub450 \ud0a4\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\uacf5\uac1c\ud0a4(Public Key)<\/strong>: \ub2e4\ub978 \uc0ac\ub78c\uc5d0\uac8c \uacf5\uac1c\ud560 \uc218 \uc788\ub294 \ud0a4<\/li>\n\n\n\n<li><strong>\uac1c\uc778\ud0a4(Private Key)<\/strong>: \uc18c\uc720\uc790\ub9cc \uc548\uc804\ud558\uac8c \ubcf4\uad00\ud574\uc57c \ud558\ub294 \ud0a4<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \uacf5\uac1c\ud0a4 \uc554\ud638\ud654 \uad6c\uc870\uc5d0\uc11c\ub294 \uacf5\uac1c\ud0a4\ub85c \uc554\ud638\ud654\ud55c \ub370\uc774\ud130\ub97c \ub300\uc751\ud558\ub294 \uac1c\uc778\ud0a4\ub85c \ubcf5\ud638\ud654\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud3c9\ubb38\n  |\n  | \uacf5\uac1c\ud0a4\ub85c \uc554\ud638\ud654\n  v\n\uc554\ud638\ubb38\n  |\n  | \uac1c\uc778\ud0a4\ub85c \ubcf5\ud638\ud654\n  v\n\ud3c9\ubb38<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc54c\uace0\ub9ac\uc998\uc73c\ub85c RSA\uc640 \ud0c0\uc6d0\uace1\uc120 \uae30\ubc18 \uc554\ud638 \uae30\uc220\uc774 \uc788\ub2e4. \ub2e8, \ubaa8\ub4e0 \ud0c0\uc6d0\uace1\uc120 \uc54c\uace0\ub9ac\uc998\uc774 \uc554\ud638\ud654\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 Ed25519\ub294 \ub514\uc9c0\ud138 \uc11c\uba85\uc5d0 \uc0ac\uc6a9\ub418\uba70, X25519\ub294 \ud0a4 \ud569\uc758\uc5d0 \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ub300\uce6d\ud0a4 \ubc29\uc2dd\uc740 \uacf5\uac1c\ud0a4\ub97c \ubc30\ud3ec\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc9c0\ub9cc, \ub300\uce6d\ud0a4 \ubc29\uc2dd\ubcf4\ub2e4 \uacc4\uc0b0 \ube44\uc6a9\uc774 \ud070 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ub300\ub7c9\uc758 \ub370\uc774\ud130\ub97c \uacf5\uac1c\ud0a4 \uc554\ud638\ud654\ub9cc\uc73c\ub85c \ucc98\ub9ac\ud558\uae30\ubcf4\ub2e4\ub294 \ud558\uc774\ube0c\ub9ac\ub4dc \uc554\ud638\ud654 \uad6c\uc870\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ub300\uce6d\ud0a4\uc640 \ube44\ub300\uce6d\ud0a4 \ube44\uad50<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uad6c\ubd84<\/th><th>\ub300\uce6d\ud0a4<\/th><th>\ube44\ub300\uce6d\ud0a4<\/th><\/tr><tr><td>\ud0a4 \uad6c\uc870<\/td><td>\uac19\uc740 \ube44\ubc00 \ud0a4 \uc0ac\uc6a9<\/td><td>\uacf5\uac1c\ud0a4\uc640 \uac1c\uc778\ud0a4 \uc30d<\/td><\/tr><tr><td>\uc18d\ub3c4<\/td><td>\uc77c\ubc18\uc801\uc73c\ub85c \ube60\ub984<\/td><td>\uc77c\ubc18\uc801\uc73c\ub85c \uc0c1\ub300\uc801\uc73c\ub85c \ub290\ub9bc<\/td><\/tr><tr><td>\ud0a4 \uacf5\uc720<\/td><td>\ube44\ubc00 \ud0a4 \uc804\ub2ec\uc774 \ubb38\uc81c<\/td><td>\uacf5\uac1c\ud0a4 \ubc30\ud3ec \uac00\ub2a5<\/td><\/tr><tr><td>\uc8fc\uc694 \uc6a9\ub3c4<\/td><td>\ub370\uc774\ud130 \uc554\ud638\ud654<\/td><td>\ud0a4 \uad50\ud658, \uc11c\uba85, \ud2b9\uc815 \ub370\uc774\ud130 \uc554\ud638\ud654<\/td><\/tr><tr><td>\ub300\ud45c \uc54c\uace0\ub9ac\uc998<\/td><td>AES, ChaCha20<\/td><td>RSA, Ed25519, X25519 \ub4f1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c TLS \ud1b5\uc2e0\uc5d0\uc11c\ub294 \uacf5\uac1c\ud0a4 \uae30\ubc18 \uc778\uc99d\uacfc \ud0a4 \ud569\uc758 \ub4f1\uc744 \uc774\uc6a9\ud574 \ud1b5\uc2e0 \uc0c1\ub300\ub97c \uc778\uc99d\ud558\uace0 \uc138\uc158 \ud0a4\ub97c \uc124\uc815\ud55c \ub4a4, \ub300\uce6d\ud0a4 \uae30\ubc18\uc758 \uc778\uc99d\ub41c \uc554\ud638\ud654\ub85c \ub370\uc774\ud130\ub97c \ubcf4\ud638\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ub514\uc9c0\ud138 \uc11c\uba85\uacfc \ud0a4 \uad00\ub9ac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ub514\uc9c0\ud138 \uc11c\uba85(Digital Signature)\uc774\ub780?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub514\uc9c0\ud138 \uc11c\uba85\uc740 \ud2b9\uc815 \ub370\uc774\ud130\uac00 \uc11c\uba85 \uc774\ud6c4 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc558\ub294\uc9c0 \ud655\uc778\ud558\uace0, \ub300\uc751\ud558\ub294 \uac1c\uc778\ud0a4\uc758 \uc18c\uc720\uc790\uac00 \uc11c\uba85\uc5d0 \uad00\uc5ec\ud588\uc74c\uc744 \uac80\uc99d\ud558\uae30 \uc704\ud55c \uc554\ud638\ud559\uc801 \uae30\uc220\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \ub514\uc9c0\ud138 \uc11c\uba85\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uad6c\uc870\ub85c \ub3d9\uc791\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc11c\uba85 \uc0dd\uc131\n--------------------------------\n\uc6d0\ubcf8 \ub370\uc774\ud130\n     |\n     v\n\uac1c\uc778\ud0a4\ub85c \uc11c\uba85 \uc0dd\uc131\n     |\n     v\n\ub370\uc774\ud130 + \ub514\uc9c0\ud138 \uc11c\uba85\n\n\uc11c\uba85 \uac80\uc99d\n--------------------------------\n\ub370\uc774\ud130 + \ub514\uc9c0\ud138 \uc11c\uba85\n     |\n     v\n\uacf5\uac1c\ud0a4\ub85c \uac80\uc99d\n     |\n     v\n\uc720\ud6a8 \/ \ubb34\ud6a8<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\uba85 \uc0dd\uc131\uc5d0\ub294 \uac1c\uc778\ud0a4\ub97c \uc0ac\uc6a9\ud558\uace0, \uac80\uc99d\uc5d0\ub294 \ub300\uc751\ud558\ub294 \uacf5\uac1c\ud0a4\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \uc11c\uba85 \uc54c\uace0\ub9ac\uc998\uc5d0\ub294 RSA-PSS, ECDSA, Ed25519\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ub514\uc9c0\ud138 \uc11c\uba85\uc774 \uc81c\uacf5\ud558\ub294 \ubcf4\uc548 \uc18d\uc131<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ubb34\uacb0\uc131(Integrity)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\uba85\ub41c \ub370\uc774\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\ub2e4\uba74 \uac80\uc99d\uc5d0 \uc2e4\ud328\ud558\ub3c4\ub85d \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc778\uc99d(Authentication)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \ubc29\uc2dd\uc73c\ub85c \uacf5\uac1c\ud0a4\uc640 \uc18c\uc720\uc790\uc758 \uad00\uacc4\uac00 \ud655\uc778\ub418\uc5b4 \uc788\ub2e4\uba74, \ud574\ub2f9 \uac1c\uc778\ud0a4\ub85c \uc0dd\uc131\ub41c \uc11c\uba85\uc784\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ubd80\uc778 \ubc29\uc9c0(Non-repudiation)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub514\uc9c0\ud138 \uc11c\uba85\uc740 \ubd80\uc778 \ubc29\uc9c0\ub97c \uc9c0\uc6d0\ud558\ub294 \uae30\uc220\uc801 \uadfc\uac70\uac00 \ub420 \uc218 \uc788\ub2e4. \uadf8\ub7ec\ub098 \uc11c\uba85\ub9cc\uc73c\ub85c \ubc95\uc801\u00b7\uc6b4\uc601\uc801 \ubd80\uc778 \ubc29\uc9c0\uac00 \uc790\ub3d9\uc73c\ub85c \ubcf4\uc7a5\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uac1c\uc778\ud0a4\uc758 \ud1b5\uc81c, \ud0a4 \ud0c8\ucde8 \uc5ec\ubd80, \uc2e0\uc6d0 \ud655\uc778, \uac10\uc0ac \uae30\ub85d \ub4f1\uc758 \uc870\uac74\uc774 \ud568\uaed8 \uace0\ub824\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub514\uc9c0\ud138 \uc11c\uba85\uc740 \ub370\uc774\ud130\ub97c \uc554\ud638\ud654\ud558\ub294 \uae30\ub2a5\uacfc \ub2e4\ub974\ub2e4. \uc11c\uba85\ub41c \ub370\uc774\ud130\ub294 \uacf5\uac1c\ud0a4\ub9cc \uac00\uc9c4 \uc0ac\ub78c\ub3c4 \uac80\uc99d\ud560 \uc218 \uc788\uc73c\uba70, \ub370\uc774\ud130 \uc790\uccb4\uac00 \ube44\ubc00\ub85c \uc720\uc9c0\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Node.js\uc5d0\uc11c \ub514\uc9c0\ud138 \uc11c\uba85 \uad6c\ud604\ud558\uae30<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c \uc608\uc2dc\ub294 Ed25519 \ud0a4 \uc30d\uc744 \uc0dd\uc131\ud558\uace0 \ub370\uc774\ud130\ub97c \uc11c\uba85\ud55c \ub4a4 \uac80\uc99d\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import {\n  generateKeyPairSync,\n  sign,\n  verify,\n} from \"node:crypto\";\n\nconst { publicKey, privateKey } =\n  generateKeyPairSync(\"ed25519\");\n\nconst message = Buffer.from(\n  JSON.stringify({\n    userId: 1001,\n    role: \"admin\",\n  })\n);\n\n\/\/ \uac1c\uc778\ud0a4\ub85c \uc11c\uba85 \uc0dd\uc131\nconst signature = sign(\n  null,\n  message,\n  privateKey\n);\n\n\/\/ \uacf5\uac1c\ud0a4\ub85c \uc11c\uba85 \uac80\uc99d\nconst isValid = verify(\n  null,\n  message,\n  publicKey,\n  signature\n);\n\nconsole.log(isValid); \/\/ true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\uba85\uc5d0 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\uc758 \ub0b4\uc6a9\uc774 \ubc14\ub00c\uba74 \uac80\uc99d\uc5d0 \uc2e4\ud328\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const modifiedMessage = Buffer.from(\n  JSON.stringify({\n    userId: 1001,\n    role: \"user\",\n  })\n);\n\nconst modifiedIsValid = verify(\n  null,\n  modifiedMessage,\n  publicKey,\n  signature\n);\n\nconsole.log(modifiedIsValid); \/\/ false<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uc608\uc2dc\uc5d0\uc11c \ud0a4 \uc30d\uc740 \uc2e4\ud589\ud560 \ub54c\ub9c8\ub2e4 \uc0c8\ub85c \uc0dd\uc131\ub41c\ub2e4. \uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c\ub294 \uac1c\uc778\ud0a4\ub97c \uc548\uc804\ud558\uac8c \ubcf4\uad00\ud558\uace0, \uac80\uc99d \uce21\uc774 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uacf5\uac1c\ud0a4\ub97c \ud655\ubcf4\ud560 \uc218 \uc788\ub3c4\ub85d \ubcc4\ub3c4\uc758 \ubc30\ud3ec\u00b7\uc778\uc99d \uccb4\uacc4\ub97c \ub9c8\ub828\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c \uc11c\uba85 \uac80\uc99d\uc740 \ub370\uc774\ud130\uac00 \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \ucd9c\ucc98\uc5d0\uc11c \uc654\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\uc9c0\ub9cc, \ub370\uc774\ud130\uc758 \ub0b4\uc6a9 \uc790\uccb4\uac00 \uc548\uc804\ud558\uac70\ub098 \uad8c\ud55c\uc774 \uc788\ub2e4\ub294 \uc0ac\uc2e4\uae4c\uc9c0 \ubcf4\uc7a5\ud558\uc9c0\ub294 \uc54a\ub294\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc720\ud6a8\ud55c \uc11c\uba85\uc774 \uc788\ub294 \uc694\uccad\uc774\ub77c\ub3c4 \uc11c\ubc84\uc5d0\uc11c \uad8c\ud55c\uc744 \ubcc4\ub3c4\ub85c \uac80\uc0ac\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">JWT\uc640 \ub514\uc9c0\ud138 \uc11c\uba85\uc758 \uad00\uacc4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc5d0\uc11c \ub514\uc9c0\ud138 \uc11c\uba85\uc740 JWT(JSON Web Token)\uc758 \uc11c\uba85 \uac80\uc99d\uacfc\ub3c4 \uc5f0\uacb0\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">JWT\ub294 \uc77c\ubc18\uc801\uc73c\ub85c Header, Payload, Signature\uc758 \uc138 \ubd80\ubd84\uc73c\ub85c \uad6c\uc131\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Header.Payload.Signature<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\uba85 \ubc29\uc2dd\uc758 JWT\ub294 \ud5e4\ub354\uc640 \ud398\uc774\ub85c\ub4dc\ub97c \uc778\ucf54\ub529\ud55c \ub4a4, \uc9c0\uc815\ub41c \uc54c\uace0\ub9ac\uc998\uacfc \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc11c\uba85\uc744 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 HS256\uc740 \ube44\ubc00\ud0a4\ub97c \uc0ac\uc6a9\ud558\ub294 HMAC \uae30\ubc18 \uc11c\uba85 \ubc29\uc2dd\uc774\uace0, RS256\uc740 RSA \uae30\ubc18 \ub514\uc9c0\ud138 \uc11c\uba85 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub450 \ubc29\uc2dd\uc740 \ud0a4 \uad00\ub9ac \uad6c\uc870\uac00 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\uad6c\ubd84<\/th><th>HS256<\/th><th>RS256<\/th><\/tr><tr><td>\ubc29\uc2dd<\/td><td>\ub300\uce6d\ud0a4 \uae30\ubc18 MAC<\/td><td>\ube44\ub300\uce6d\ud0a4 \uae30\ubc18 \uc11c\uba85<\/td><\/tr><tr><td>\uc0dd\uc131<\/td><td>\ube44\ubc00\ud0a4\ub85c \uc11c\uba85\uac12 \uc0dd\uc131<\/td><td>\uac1c\uc778\ud0a4\ub85c \uc11c\uba85<\/td><\/tr><tr><td>\uac80\uc99d<\/td><td>\ub3d9\uc77c\ud55c \ube44\ubc00\ud0a4 \ud544\uc694<\/td><td>\uacf5\uac1c\ud0a4\ub85c \uac80\uc99d \uac00\ub2a5<\/td><\/tr><tr><td>\uc8fc\uc694 \uace0\ub824\uc0ac\ud56d<\/td><td>\ube44\ubc00\ud0a4 \uacf5\uc720 \ubc94\uc704<\/td><td>\uac1c\uc778\ud0a4 \ubcf4\ud638\uc640 \uacf5\uac1c\ud0a4 \ubc30\ud3ec<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">HS256\uc5d0\uc11c\ub294 \uc11c\uba85 \uac80\uc99d\uc5d0 \uc0ac\uc6a9\ud558\ub294 \ube44\ubc00\ud0a4\ub97c \uac00\uc9c4 \uc8fc\uccb4\uac00 \uc0c8\ub85c\uc6b4 \uc720\ud6a8 \uc11c\uba85\uc744 \uc0dd\uc131\ud560 \uc218\ub3c4 \uc788\ub2e4. \ubc18\uba74 RS256\uc5d0\uc11c\ub294 \uacf5\uac1c\ud0a4\ub9cc \uac00\uc9c4 \uac80\uc99d \uc11c\ubc84\uac00 \uc11c\uba85\uac12\uc744 \uac80\uc99d\ud560 \uc218 \uc788\uc9c0\ub9cc, \uc0c8\ub85c\uc6b4 \uc11c\uba85\uc744 \uc0dd\uc131\ud558\ub824\uba74 \uac1c\uc778\ud0a4\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uc694\ud55c \uc810\uc740 <strong>JWT\uc758 \uc11c\uba85\uc740 \ud398\uc774\ub85c\ub4dc\ub97c \uc554\ud638\ud654\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uac83<\/strong>\uc774\ub2e4. \uc77c\ubc18\uc801\uc778 \uc11c\uba85 JWT\uc758 \ud398\uc774\ub85c\ub4dc\ub294 \ub514\ucf54\ub529\ud558\uc5ec \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \ube44\ubc00\ubc88\ud638\ub098 \ubbfc\uac10\ud55c \uac1c\uc778\uc815\ubcf4\ub97c \ub123\uc5b4\uc11c\ub294 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ud55c JWT\ub97c \uac80\uc99d\ud560 \ub54c\ub294 \uc11c\uba85\ub9cc \ud655\uc778\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \ud5c8\uc6a9\ub41c \uc54c\uace0\ub9ac\uc998, \ub9cc\ub8cc \uc2dc\uac04(<code>exp<\/code>), \ubc1c\uae09\uc790(<code>iss<\/code>), \ub300\uc0c1(<code>aud<\/code>) \ub4f1 \ud544\uc694\ud55c \ud074\ub808\uc784\uc744 \ud568\uaed8 \uac80\uc99d\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud0a4 \uad00\ub9ac(Key Management)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud559 \uc54c\uace0\ub9ac\uc998\uc744 \uc62c\ubc14\ub974\uac8c \uc120\ud0dd\ud574\ub3c4 \ud0a4\ub97c \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud558\uc9c0 \ubabb\ud558\uba74 \uc804\uccb4 \ubcf4\uc548\uc774 \ubb34\ub108\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 AES-256-GCM\uc744 \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 \uc554\ud638\ud654 \ud0a4\ub97c \uc18c\uc2a4 \ucf54\ub4dc\uc5d0 \ud558\ub4dc\ucf54\ub529\ud558\uac70\ub098 Git \uc800\uc7a5\uc18c\uc5d0 \ucee4\ubc0b\ud558\uba74 \uacf5\uaca9\uc790\uac00 \ud0a4\ub97c \ud68d\ub4dd\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \uc798\ubabb\ub41c \uc608\uc2dc\nconst ENCRYPTION_KEY =\n  \"my-secret-encryption-key\";<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc554\ud638\ud654 \ud0a4\ub294 \uc784\uc758\ub85c \uc0dd\uc131\ud558\uace0, \uc801\uc808\ud55c \ube44\ubc00 \uad00\ub9ac \uc2dc\uc2a4\ud15c\uc744 \ud1b5\ud574 \ubcf4\uad00\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud0a4 \uad00\ub9ac\uc758 \ud575\uc2ec \uc6d0\uce59<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uc548\uc804\ud55c \ud0a4 \uc0dd\uc131<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud559\uc801\uc73c\ub85c \uc548\uc804\ud55c \ub09c\uc218 \uc0dd\uc131\uae30\ub97c \uc0ac\uc6a9\ud55c\ub2e4. Node.js\uc5d0\uc11c\ub294 <code>crypto.randomBytes()<\/code> \ub4f1\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud0a4\uc640 \ub370\uc774\ud130\uc758 \ubd84\ub9ac<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud654\ub41c \ub370\uc774\ud130\uc640 \uc554\ud638\ud654 \ud0a4\ub97c \ub3d9\uc77c\ud55c \uc811\uadfc \uad8c\ud55c\uacfc \uc800\uc7a5 \uc704\uce58\uc5d0 \ubb34\ubc29\ube44\ud558\uac8c \ub450\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ucd5c\uc18c \uad8c\ud55c \uc6d0\uce59<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 \uc11c\ube44\uc2a4\uac00 \uc2e4\uc81c\ub85c \ud544\uc694\ud55c \ud0a4\uc5d0\ub9cc \uc811\uadfc\ud560 \uc218 \uc788\ub3c4\ub85d \uad8c\ud55c\uc744 \uc81c\ud55c\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud0a4 \uad50\uccb4(Rotation)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud0a4\uac00 \ub178\ucd9c\ub418\uc5c8\uac70\ub098 \uc815\ucc45\uc0c1 \uad50\uccb4\uac00 \ud544\uc694\ud55c \uacbd\uc6b0 \uc0c8\ub85c\uc6b4 \ud0a4\ub97c \ub3c4\uc785\ud558\uace0, \uae30\uc874 \ub370\uc774\ud130\uc758 \ubcf5\ud638\ud654 \ubc0f \uc7ac\uc554\ud638\ud654 \uc804\ub7b5\uc744 \ub9c8\ub828\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud0a4 \ud3d0\uae30\uc640 \ubcf5\uad6c<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ud0a4\ub97c \uc548\uc804\ud558\uac8c \ud3d0\uae30\ud558\uace0, \ud0a4 \uc190\uc2e4\ub85c \ub370\uc774\ud130\ub97c \ubcf5\uad6c\ud560 \uc218 \uc5c6\uac8c \ub418\ub294 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 \uc801\uc808\ud55c \ubc31\uc5c5 \ubc0f \ubcf5\uad6c \uc808\ucc28\ub97c \uc124\uacc4\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\uac10\uc0ac \ub85c\uadf8<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud0a4\uc5d0 \ub300\ud55c \uc811\uadfc\uacfc \uc0ac\uc6a9 \uc774\ub825\uc744 \uae30\ub85d\ud558\uace0 \uc774\uc0c1 \uc811\uadfc\uc744 \ud0d0\uc9c0\ud55c\ub2e4. \ub2e8, \ub85c\uadf8\uc5d0 \ube44\ubc00\ud0a4\ub098 \ubbfc\uac10\ud55c \ub370\uc774\ud130\ub97c \uc9c1\uc811 \uae30\ub85d\ud574\uc11c\ub294 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc6b4\uc601 \ud658\uacbd\uc5d0\uc11c \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \ub3c4\uad6c<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS KMS: \uc554\ud638\ud654 \ud0a4\uc758 \uc0dd\uc131, \ubcf4\ud638, \uc0ac\uc6a9 \uad8c\ud55c \uad00\ub9ac \ub4f1\uc744 \uc9c0\uc6d0\ud55c\ub2e4.<\/li>\n\n\n\n<li>AWS Secrets Manager: \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ube44\ubc00\ubc88\ud638, API \ud0a4 \ub4f1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ube44\ubc00\uac12\uc758 \uad00\ub9ac\uc5d0 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/li>\n\n\n\n<li>HashiCorp Vault: \ube44\ubc00\uac12\uacfc \uc554\ud638\ud654 \ud0a4 \uad00\ub9ac, \uc811\uadfc \uc81c\uc5b4 \ub4f1\uc744 \uc9c0\uc6d0\ud55c\ub2e4.<\/li>\n\n\n\n<li>HSM(Hardware Security Module): \ub192\uc740 \uc218\uc900\uc758 \ud0a4 \ubcf4\ud638\uac00 \ud544\uc694\ud55c \ud658\uacbd\uc5d0\uc11c \uc554\ud638\ud559\uc801 \ud0a4\ub97c \ubcf4\ud638\ud558\uace0 \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\ub294 \ub370 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ub3c4\uad6c\ub9c8\ub2e4 \ubaa9\uc801\uc774 \ub2e4\ub974\ubbc0\ub85c \ubaa8\ub4e0 \ube44\ubc00\uac12\uc744 \ud558\ub098\uc758 \ub3c4\uad6c\uc5d0 \ubb34\uc870\uac74 \ub123\uae30\ubcf4\ub2e4\ub294 \ud0a4\uc758 \uc6a9\ub3c4, \uc704\ud611 \ubaa8\ub378, \uc6b4\uc601 \ube44\uc6a9, \uc811\uadfc \uc81c\uc5b4 \uc694\uad6c\uc0ac\ud56d\uc744 \uae30\uc900\uc73c\ub85c \uc120\ud0dd\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ubc31\uc5d4\ub4dc \uc11c\ubc84\uc5d0\uc11c\uc758 \uc2e4\uc804 \uc801\uc6a9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc11c\ubc84\uc5d0\uc11c\ub294 \ud558\ub098\uc758 \uc554\ud638\ud559 \uae30\uc220\ub9cc\uc73c\ub85c \ubcf4\uc548\uc744 \ud574\uacb0\ud558\uc9c0 \uc54a\ub294\ub2e4. \ub370\uc774\ud130\uc758 \ubaa9\uc801\uc5d0 \ub530\ub77c \uc11c\ub85c \ub2e4\ub978 \uae30\uc220\uc744 \uc870\ud569\ud55c\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\ubcf4\ud638 \ub300\uc0c1<\/th><th>\uad8c\uc7a5 \uc811\uadfc \ubc29\uc2dd<\/th><\/tr><tr><td>\uc0ac\uc6a9\uc790 \ube44\ubc00\ubc88\ud638<\/td><td>Argon2id \ub4f1 \ube44\ubc00\ubc88\ud638 \uc804\uc6a9 \ud574\uc2f1<\/td><\/tr><tr><td>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac1c\uc778\uc815\ubcf4<\/td><td>AES-GCM \ub4f1 \uc778\uc99d\ub41c \uc554\ud638\ud654\uc640 \uc548\uc804\ud55c \ud0a4 \uad00\ub9ac<\/td><\/tr><tr><td>API \uc694\uccad\uc758 \uc778\uc99d<\/td><td>\uc138\uc158 \ub610\ub294 \uc801\uc808\ud788 \uac80\uc99d\ub41c \ud1a0\ud070<\/td><\/tr><tr><td>JWT \uc11c\uba85<\/td><td>HS256, RS256, EdDSA \ub4f1 \uc694\uad6c\uc0ac\ud56d\uc5d0 \ub9de\ub294 \ubc29\uc2dd<\/td><\/tr><tr><td>\uc11c\ube44\uc2a4 \uac04 \uba54\uc2dc\uc9c0 \uc778\uc99d<\/td><td>HMAC \ub610\ub294 \ub514\uc9c0\ud138 \uc11c\uba85<\/td><\/tr><tr><td>\ud30c\uc77c \ubb34\uacb0\uc131 \uac80\uc99d<\/td><td>SHA-256 \ub4f1 \uc554\ud638\ud559\uc801 \ud574\uc2dc<\/td><\/tr><tr><td>TLS \ud1b5\uc2e0<\/td><td>\uac80\uc99d\ub41c TLS \uad6c\ud604\uacfc \uc801\uc808\ud55c \uc778\uc99d\uc11c \uad00\ub9ac<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uac8c\uc784 \uc11c\ubc84\ub97c \uc608\ub85c \ub4e4\uba74 \uc0ac\uc6a9\uc790 \ube44\ubc00\ubc88\ud638\ub294 Argon2id\ub85c \ud574\uc2f1\ud574 \uc800\uc7a5\ud558\uace0, \uac1c\uc778\uc815\ubcf4\ub294 \ud544\uc694\uc5d0 \ub530\ub77c \uc554\ud638\ud654\ud558\uba70, JWT\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uba74 \uc11c\uba85\uacfc \ub9cc\ub8cc \uc2dc\uac04 \ub4f1\uc744 \uac80\uc99d\ud55c\ub2e4. \uac8c\uc784 \uc7ac\ud654\uc640 \uacb0\uc81c \ub0b4\uc5ed\uc740 \uc554\ud638\ud654\ub9cc\uc73c\ub85c \ubcf4\ud638\ub418\ub294 \uac83\uc774 \uc544\ub2c8\ubbc0\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad8c\ud55c, \ud2b8\ub79c\uc7ad\uc158, \uac10\uc0ac \uae30\ub85d, \uc11c\ubc84 \uad8c\ud55c \uac80\uc99d\ub3c4 \ud568\uaed8 \uc801\uc6a9\ud574\uc57c \ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ubc31\uc5d4\ub4dc \uc11c\ubc84\ub294 \uc0ac\uc6a9\uc790 \ube44\ubc00\ubc88\ud638, \uc778\uc99d \ud1a0\ud070, \uac1c\uc778\uc815\ubcf4, \uac8c\uc784 \uc7ac\ud654, \uacb0\uc81c \uc815\ubcf4 \ub4f1 \ub2e4\uc591\ud55c \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud55c\ub2e4. \uc774 \ub370\uc774\ud130\ub97c \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud558\ub824\uba74 \uc554\ud638\ud559(Cryptography)\uc758 \uae30\ubcf8 \uc6d0\ub9ac\ub97c \uc774\ud574\ud574\uc57c \ud55c\ub2e4. \uc554\ud638\ud559\uc740 \ub2e8\uc21c\ud788 \ub370\uc774\ud130\ub97c \uc554\ud638\ud654\ud558\ub294 \uae30\uc220\uc774 \uc544\ub2c8\ub2e4. \ub370\uc774\ud130\uc758 \uae30\ubc00\uc131, \ubb34\uacb0\uc131, \uc778\uc99d, \ubd80\uc778 \ubc29\uc9c0 \ub4f1\uc744 \uc81c\uacf5\ud558\ub294 \ubcf4\uc548 \uae30\uc220\uc758 \uc9d1\ud569\uc774\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc790\uac00 \ubc18\ub4dc\uc2dc \uc54c\uc544\uc57c \ud560 \ub2e4\uc74c \uac1c\ub150\uc744 \uc815\ub9ac\ud55c\ub2e4. Hash\uc640 \uc554\ud638\ud654\uc758 \ucc28\uc774 Hash\ub780? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2663","post","type-post","status-publish","format-standard","hentry","category-dev-logs"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2663"}],"version-history":[{"count":1,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2663\/revisions"}],"predecessor-version":[{"id":2664,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2663\/revisions\/2664"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}