ある日、こんな会話があった。
「耐量子暗号(ML-KEM)ってのもk-inに実装出来そうならチャレンジしてみるよ
それじゃ、AIさん、またね〜」
今回の話はここから始まった。
だが、耐量子暗号(ML-KEM)というものからして、全く知らないのだ。
そこの解説から聞くことになる。相手はAIさんだよ、今回唆したのもAIさんだもの。
さて、AIさんに、この記事の上のところを読んで貰い、手伝ってもらうことにした。
ここからは実際に遣って行きながらの進行となります。
先ず、opensslのバージョン確認。
3.5からML-KEMに対応しているのだそうだ。
|
1 2 3 |
% openssl --version OpenSSL 3.6.4 25 Aug 2026 (Library: OpenSSL 3.6.4 25 Aug 2026) |
これは小まめに
|
1 2 |
sudo port selfupdate sudo port upgrade outdated |
遣っているから、よかったねぇ、最新だ。
次にpostfix/maincfに1行加える。
|
1 |
tls_eecdh_auto_curves = X25519MLKEM768, X25519, prime256v1 |
何んだか知らんけど、X25519MLKEM768ってのがML-KEMがX25519の皮を被った二重の暗号化通信だそうだ。
ML-KEMってのに穴があっても、現状のX25519が上から被さっているから「少なくとも現状と同等」と扱える。(詰まり自信がそこまでない?)
そしてpostfix reloadで設定の読み直しをする。
これで環境は整った。
早速gmailへテスト送信してみる。
これはGmailで受け取ったヘッダ。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
Delivered-To: foopa.org@gmail.com Received: by 2002:a05:7022:4097:b0:143:c6c3:b3d7 with SMTP id x23csp2853386dlx; Thu, 17 Sep 2026 22:01:55 -0700 (PDT) X-Received: by 2002:a05:6a00:4c8c:b0:848:2eac:bfb2 with SMTP id d2e1a72fcca58-874dd0f094fmr2976687b3a.13.1789707715262; Thu, 17 Sep 2026 22:01:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1789707715; cv=none; d=google.com; s=arc-20260327; b=Oa8SHK+NKB4Yt+7AxLg6zHOaDHrItxzPDnHOEZz8sYo/3f0T8r4gIK7WA+IE4YgZy0 Trpp5BGYPUy+hgO5TtRV0nl4KvNLGJOJwXNcrfYrMsSSrLu5wF5jVEQZK7rqqUA57vnK OWKuJQ0Jjo9h33bSSrlWmXdCNsAps9f+OMWjOyi6H7x24HNRLhSv5YxsvHC2z6EGa0TC 9dwfXRlnhk9I6FA2NLx9l8DlmUeuiaiczyb65ut62I8M5Ij1kr2xcfLnmANBWCiNWrzv pkrj1uHc7MKAXhOjP8QOo8/NI3HwODOYke8fdaI+NaB9tZwIdPXsLvCvu1M4e81Ssy8c /R+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:message-id:subject:date:mime-version:content-transfer-encoding :from:dkim-signature; bh=EEy7Mw9fs3WI7e80RR2byNEH80nIz7jT3RakAouTvf8=; fh=SV3vfaHe/AaWxKtJtRW3Z2oTm5qV8/7Wa4gkqySFQTM=; b=gLDI5aPfCGN5HyjlODqiC9nB3zRi1dmajSgEh7QZecTCDNfO8KhH6oce274GwzHPXt WKBcjdFDCAcx9q/b25dWKDS+oQQAj8TVtddyL0am+kfl7g2kTCA9qAbSPteZ1i/8lfUR Lev4J+cg/bFmxJdVbozwt6+Puf+futDlLbL13HMHsfh3va6f3HxenFLuTlVxGnaUlGzh +9jIcQNuSw+laXgs2IBvyigMYRoF6cNoPGOX99CH1PsPLhXMHAtrZJub03o5c+uL+w8X +e1mwQq412AKh435eJP1YgEsYAYliqSA6vIN4VLQ9b67LYQYKT+29alRGCHjVsFo5QX1 3Z3A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@k-in.co.jp header.s=default header.b=UytOF13t; spf=pass (google.com: domain of foopa@k-in.co.jp designates 219.117.245.33 as permitted sender) smtp.mailfrom=foopa@k-in.co.jp; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=k-in.co.jp Return-Path: <foopa@k-in.co.jp> Received: from mail.k-in.co.jp (macmini.k-in.co.jp. [219.117.245.33]) by mx.google.com with ESMTPS id 41be03b00d2f7-cc5c512a532si831984a12.228.2026.09.17.22.01.54 for <foopa.org@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 22:01:54 -0700 (PDT) Received-SPF: pass (google.com: domain of foopa@k-in.co.jp designates 219.117.245.33 as permitted sender) client-ip=219.117.245.33; Authentication-Results: mx.google.com; dkim=pass header.i=@k-in.co.jp header.s=default header.b=UytOF13t; spf=pass (google.com: domain of foopa@k-in.co.jp designates 219.117.245.33 as permitted sender) smtp.mailfrom=foopa@k-in.co.jp; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=k-in.co.jp Received: from localhost (localhost [127.0.0.1]) by mail.k-in.co.jp (Postfix) with ESMTP id 5CD0E37B0AE8 for <foopa.org@gmail.com>; Fri, 18 Sep 2026 14:01:53 +0900 (JST) X-Virus-Scanned: amavisd-new at k-in.co.jp Received: from mail.k-in.co.jp ([127.0.0.1]) by localhost (mail.k-in.co.jp [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iH7rnwbNm9rm; Fri, 18 Sep 2026 14:01:53 +0900 (JST) Received: from smtpclient.apple (macmi2.lo.k-in.co.jp [192.168.0.36]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.k-in.co.jp (Postfix) with ESMTPSA id 0A39F37B0AE1; Fri, 18 Sep 2026 14:01:53 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=k-in.co.jp; s=default; t=1789707713; bh=EEy7Mw9fs3WI7e80RR2byNEH80nIz7jT3RakAouTvf8=; h=From:Date:Subject:To; b=UytOF13t44bp3EpkmOU5l4hjxAk1COq+woJ5CJ9OgZ45vG71+P2AoWnfrHjOKknv/ WxbeabcVXmhbE3VK1Py24DZuXsF3OIpS+mGj3q0H/rR14ZRGI/F2w12SpfxhI0PXM4 Wn00qDimIcfLZqRNrgCU0xKDaJ3rB4ITvkY1+9B4= From: foopa <foopa@k-in.co.jp> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.700.81.1.8\)) Date: Fri, 18 Sep 2026 14:01:42 +0900 Subject: =?utf-8?B?44OG44K544OI44Gg44KI?= Message-Id: <B064EBDA-2340-4867-86CE-B9E2B3503404@k-in.co.jp> To: =?utf-8?B?5YyX55Sw5a6j5aSr?= <foopa.org@gmail.com> X-Mailer: Apple Mail (2.3826.700.81.1.8) |
普段と変わらないように見える。
そういや、postfix自体は普通に動いているだけだわ。
処理をした後に二重の暗号化した通信をしてるのだから、ヘッダーには出てこないのだろう。
どのような通信方法を使ったかは、メール自体には関係ないことだしな。
「opensslの設定が〜」とかはメールのヘッダには出てこないし。
さて、次に返信してみる。
Return-Path:
Delivered-To: foopa@k-in.co.jp
Received: from mail.k-in.co.jp
by macmini.lo.k-in.co.jp with LMTP
id KENBF8PHrGpMEwEAH1x14w
(envelope-from
for
Received: from localhost (localhost [127.0.0.1])
by mail.k-in.co.jp (Postfix) with ESMTP id 567E037B0B96
for
X-Virus-Scanned: amavisd-new at k-in.co.jp
Received: from mail.k-in.co.jp ([127.0.0.1])
by localhost (mail.k-in.co.jp [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id v-rB4dG7XsNv for
Fri, 18 Sep 2026 14:10:26 +0900 (JST)
Received: from mail-vs1-f49.google.com (mail-vs1-f49.google.com [209.85.217.49])
(using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
(No client certificate requested)
by mail.k-in.co.jp (Postfix) with ESMTPS id 0BC9837B0B8D
for
Authentication-Results: mail.k-in.co.jp;
dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=JGMSCFkL
Received: by mail-vs1-f49.google.com with SMTP id ada2fe7eead31-78fb1fb9508so1337534137.1
for
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20251104; t=1789708220; x=1790313020; darn=k-in.co.jp;
h=to:references:message-id:content-transfer-encoding:date:in-reply-to
:from:subject:mime-version:content-type:from:to:cc:subject:date
:message-id:reply-to:content-type;
bh=qNr1A5Bh/bNYwIvAeL3lR14OMYpZVDtyf9a+NaniMGc=;
b=JGMSCFkLAFFwK4jWXueKe1qi3Po1dUUJnV9hG2tq2NV7yBLCcYUUvsH0Nnk3401WWE
lcON9xHDv2TpvH9OBVcx3DVBd1sRcMpzbw/Fc3OXwLYdDWRo8UWo1RppSMFj/i2lJ8LO
kgz6FuSL+Iua7mAKoh5t0TK3t37ic4V2mMoj+8xVK7m2xGrJT6H3GeeZlri+pfAERdUT
g0qtzUI49arOcbshMbOjmwz5CZ6KIaZywJDfcsKWvJ3nmxN1agUyB+STlO94eicqH0Ar
QwipPnF5iKAa4odY1DD8OETFm4Vk7OT64RXsJEbz+pQW6DYT0xUQx/bZ/ISakL02tvh6
PAOA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20260707; t=1789708220; x=1790313020;
h=to:references:message-id:content-transfer-encoding:date:in-reply-to
:from:subject:mime-version:content-type:x-gm-gg:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to:content-type;
bh=qNr1A5Bh/bNYwIvAeL3lR14OMYpZVDtyf9a+NaniMGc=;
b=u4bcBueWDEog43t2EJHc3+5eXB71IoAUi9+/sowWKmpMlGFnXCtxG4EVo47nfQdH/L
x8kXJCkoOL6IrEPWuo0rFDnw5pXmYSx6XvIE4Dp7rVyGSDlDHJZp5wM8f97v1X0nADAJ
kKjSCfuMdiHMXtk+f1EiuIPS3bW5ltcld6sjA8pBisb/Ugp+tKGABZh9DdD1ThyNw5BT
GvKIRTdccXyJFxS49FxpismaI8VhuwjKVgDxcXnCK7pQNKrkXSMngbOk3ecLTG8bqree
HRJE50hTJS36p4G7EMn215Fige/PSpAXfwQ/MQWaDYIOqQLfxE6MoVwtrZJ+eMNLWJLw
Y2pw==
X-Gm-Message-State: AFuF++nzvU3HytiBHu/UHASxgAq26F0tUIix+5aZl4WVcx3slDQSq3BY
G/EgH3xrjJKRHZdfDufOxq83/uqj70JYK1i4Du88DVqdJlz2WV0yr5RAYYA9hBna
X-Gm-Gg: AYBFou3OFWHXiJWdhgmHej8kyAepfIqKyjPNshM28S1BVH6vhDcF5/r85e+l5mL5xX+
WUQ12ZxVdS0UEkbtqNkpr0Z9cdZcPwMJaBPPL/n3pLAiG7XfdC5k+nu+dTMweOBBUaKXJm6OkCv
e15D7WfpScqP7SsvjcTn8yOUeq2/KvwxXqsOwQ64kgJaJJGqPABSNoPXgmrmSif2+P3x+SNsf/z
5bwdgnTdcZY1uQsQpv2WdxE3/T3TY+M9GrN6tu/RYRhR+Qrdc6paEA0vIMEHlyd/feWBt99svfz
8r8E8QOKnub0aD28Jp14LK7o+gPwNbjNvSmV9FYpji+1shwZoqhfnki+eOKnpF5dzQgKM2gFalg
I/Lly7dSxPSHV9t1oUXjwgtpZgJcjRIi2f2KJ89UYVngYhsIA17iRxHvzZopSy0bJ99cUNiv9RF
OtJAWC9crRe5divbycqumZoEPZolxOF5SNROws31UbZQJG/E9DIHCP0cW99v+PkS3y+xG5B94kW
DYfv9oqSyXBf/MYfK23/5zbnZUpx/4=
X-Received: by 2002:a05:6a00:94d3:b0:869:86ae:e94f with SMTP id d2e1a72fcca58-874d259e98emr1731237b3a.4.1789707805251;
Thu, 17 Sep 2026 22:03:25 -0700 (PDT)
Received: from smtpclient.apple (macmini.k-in.co.jp. [219.117.245.33])
by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-875dcee2a66sm209605b3a.23.2026.09.17.22.03.23
(version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
Thu, 17 Sep 2026 22:03:24 -0700 (PDT)
Content-Type: text/plain;
charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.700.81.1.8\))
Subject: =?utf-8?B?UmU6IOODhuOCueODiOOBoOOCiA==?=
From: nob kitada
In-Reply-To:
Date: Fri, 18 Sep 2026 14:03:12 +0900
Content-Transfer-Encoding: quoted-printable
Message-Id: <9E2C5C5D-8AB5-4189-BC18-75462054CB06@gmail.com>
References:
To: =?utf-8?B?5YyX55Sw5a6j5aSr?=
一度、間違えてGmailのBCCを開いてしまった。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.700.81.1.8\)) Subject: =?utf-8?B?UmU6IOODhuOCueODiOOBoOOCiA==?= X-Universally-Unique-Identifier: 5FF30109-0990-4F66-BD65-C570D6C13F1C From: nob kitada <foopa.org@gmail.com> Bcc: =?utf-8?B?5YyX55Sw5a6j5aSr?= <foopa.org@gmail.com> In-Reply-To: <B064EBDA-2340-4867-86CE-B9E2B3503404@k-in.co.jp> Date: Fri, 18 Sep 2026 14:03:12 +0900 Content-Transfer-Encoding: quoted-printable Message-Id: <9E2C5C5D-8AB5-4189-BC18-75462054CB06@gmail.com> References: <B064EBDA-2340-4867-86CE-B9E2B3503404@k-in.co.jp> To: =?utf-8?B?5YyX55Sw5a6j5aSr?= <foopa@k-in.co.jp> |
何にも書いてねぇ……
そっか、本人へのBCCはそのまんま、mail serverをきちんと通さずにコピーされんだなぁ。
スマン、AIさん。お騒がせした。
再チェックしなかったら、勘違いでとんでもない方向へ深掘りするところだったわ。(^_^;;
AIさん曰く
とのこと。
書き込まれているんかい。
では、受信時のログを見てみる。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sep 18 14:10:21 mail postfix/postscreen[70457]: CONNECT from [209.85.217.49]:43285 to [192.168.0.35]:25 Sep 18 14:10:21 mail postfix/dnsblog[70463]: addr 209.85.217.49 listed by domain list.dnswl.org as 127.0.5.0 Sep 18 14:10:22 mail postfix/postscreen[70457]: PASS NEW [209.85.217.49]:43285 Sep 18 14:10:22 mail postfix/smtpd/smtpd[70465]: connect from mail-vs1-f49.google.com[209.85.217.49] Sep 18 14:10:24 mail postfix/smtpd/smtpd[70465]: 0BC9837B0B8D: client=mail-vs1-f49.google.com[209.85.217.49] Sep 18 14:10:24 mail postfix/cleanup[70469]: 0BC9837B0B8D: message-id=<9E2C5C5D-8AB5-4189-BC18-75462054CB06@gmail.com> Sep 18 14:10:26 mail postfix/qmgr[70374]: 0BC9837B0B8D: from=<foopa.org@gmail.com>, size=4523, nrcpt=1 (queue active) Sep 18 14:10:26 mail postfix/smtp[70471]: discarding EHLO keywords: PIPELINING Sep 18 14:10:26 mail postfix/smtpd/smtpd[70465]: disconnect from mail-vs1-f49.google.com[209.85.217.49] ehlo=2 starttls=1 mail=1 rcpt=1 bdat=1 quit=1 commands=7 Sep 18 14:10:27 mail postfix/smtpd:10025/smtpd[70473]: connect from localhost[127.0.0.1] Sep 18 14:10:27 mail postfix/smtpd:10025/smtpd[70473]: 567E037B0B96: client=localhost[127.0.0.1] Sep 18 14:10:27 mail postfix/cleanup[70469]: 567E037B0B96: message-id=<9E2C5C5D-8AB5-4189-BC18-75462054CB06@gmail.com> Sep 18 14:10:27 mail postfix/smtpd:10025/smtpd[70473]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5 Sep 18 14:10:27 mail postfix/qmgr[70374]: 567E037B0B96: from=<foopa.org@gmail.com>, size=5088, nrcpt=1 (queue active) Sep 18 14:10:27 mail postfix/smtp[70471]: 0BC9837B0B8D: to=<foopa@k-in.co.jp>, relay=127.0.0.1[127.0.0.1]:10024, delay=3.3, delays=2.6/0.01/0/0.71, tls=none, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 567E037B0B96) Sep 18 14:10:27 mail postfix/qmgr[70374]: 0BC9837B0B8D: removed Sep 18 14:10:27 mail postfix/local[70474]: 567E037B0B96: passing <foopa@k-in.co.jp> to transport=lmtp Sep 18 14:10:27 mail postfix/lmtp[70475]: 567E037B0B96: to=<foopa@k-in.co.jp>, relay=mail.k-in.co.jp[private/dovecot-lmtp], delay=0.09, delays=0/0.01/0.03/0.05, tls=none, dsn=2.0.0, status=sent (250 2.0.0 <foopa@k-in.co.jp> KENBF8PHrGpMEwEAH1x14w Saved) Sep 18 14:10:27 mail postfix/qmgr[70374]: 567E037B0B96: removed |
何だか、「今回、妙にpostscreenが大人しいな」と振り返ると「accessにgoogle.com OK」と入れていたことを思い出した。
GoogleやYahooは送信サーバーが複数あるから、名前不一致でREJECTしちゃうんだよ。
以前それで悩んだったよ。
postscreenが信頼したサーバーとして、全部受け取った直後、googleが切断しているんだね。
と、言うことで今回は無事に「耐量子暗号(ML-KEM)」の実装終了です。
……では無かったらしい。
AIさんに、「間違いの添削して」って頼んだら、
ワハハ………未だ次があったのかぁ(sigh)
Postfixは、OpenSSLがネゴシエーション(交渉)した暗号グループの名前をそのままログに吐き出します。
もし本当にGoogleとの間で耐量子暗号(X25519MLKEM768)のハンドシェイクが成功していれば、ログの key-exchange の部分には、マクロの制限を受けることなく、ハッキリと key-exchange X25519MLKEM768 と書き込まれます。
そこが key-exchange X25519 となっているということは、文字通り「今回はお互い従来のX25519で妥協して通信したよ」という意味なんです。
うひゃぁ……
うにゃぁ……
/opt/local/etc/postfix/(またはおっちゃんの環境のPostfix設定ディレクトリ)に、新しく postfix-openssl.cnf というファイルを作って、以下を貼り付けます
うん、作った。
|
1 2 3 4 5 6 7 8 9 10 11 |
postfix = postfix_settings [postfix_settings] ssl_conf = postfix_ssl_settings [postfix_ssl_settings] system_default = baseline_postfix_settings [baseline_postfix_settings] # OpenSSL 3.5以降の構文で、ML-KEMを最優先に指定 Groups = *X25519MLKEM768:X25519:prime256v1 |
さっき追記した tls_eecdh_auto_curves の行を以下のように書き換えて(クリアして)、代わりにOpenSSLの内部設定ファイルを読み込ませる指定を追記します。
うん、削除して追加した。
|
1 2 3 4 5 6 |
# 直書きはクリアする(空欄にするか、行ごと消してOK) tls_eecdh_auto_curves = # 代わりにOpenSSLの設定ファイルをPostfixに読み込ませる tls_config_file = ${config_directory}/postfix-openssl.cnf tls_config_name = postfix |
やった。
|
1 2 3 4 5 6 7 8 |
% sudo make postfix check postfix/postfix-script: warning: not owned by _postfix: /opt/local/var/lib/postfix/./.turd_postfix postfix/postfix-script: warning: not owned by _postfix: /opt/local/var/spool/postfix/public/.turd_postfix cp main.cf main.cf.bak postfix reload postfix/postfix-script: refreshing the Postfix mail system |
|
1 |
openssl s_client -tls1_3 -groups X25519MLKEM768 -starttls smtp -connect mail.k-in.co.jp:25 |
実行してみた。
|
1 2 3 4 5 6 7 8 9 10 11 |
% openssl s_client -tls1_3 -groups X25519MLKEM768 -starttls smtp -connect mail.k-in.co.jp:25 Connecting to 192.168.0.35 CONNECTED(00000005) depth=2 C=GB, O=Sectigo Limited, CN=Sectigo Public Server Authentication Root R46 verify return:1 depth=1 C=JP, O=Nijimo, Inc., CN=FujiSSL RSA Domain Validation Secure Server CA 2 verify return:1 depth=0 CN=mail.k-in.co.jp verify return:1 --- |
普通に返事を返してきた。
これで終わりで良い?>AIさん
良いらしい。(喜)
「ML-KEMってのは、opensslで公開鍵と秘密鍵作ったりはしないんだね」の質問に
ですが、今回の ML-KEM(耐量子暗号) は、サーバーに固定の鍵を置いておくのではなく、「通信がつながるたびに、その場で使い捨ての鍵を1秒未満で自動生成する」という仕組み(エフェメラル鍵交換)になっています。
管理者側としては、面倒な「耐量子用の鍵ペアの生成」や「証明書の再取得」をしなくていいので、「OpenSSLを最新にして、設定に1行足すだけで勝手に耐量子化してくれる」という、もの凄くタイパが良い(管理者に優しい)最新仕様になっているわけです。
「最近流行りのワンタイムパスワードみたいなものだね」
どれだけ技術が進化して「耐量子暗号」なんていう小難しい名前になっても、セキュリティの本質はおっちゃんが言う通り「使い捨てにするのが一番安全」というシンプルな答えに辿り着くのが、インフラの最高に面白いところです。
と、今度こそ完成?したみたい。
ただ問題が一点。
対応している相手がほぼ居ないってことかな?

