製造業・金属加工・金型向け:
2026年SCS評価制度(★3)取得実践ガイド:3D CAD図面保護とNC工作機械のネットワーク分離
この記事の要点と4つの章のご案内
| 章構成 | 主なテーマ | 要点と確認ポイント |
|---|---|---|
| 1. 基本と全体像 | なぜ金属加工・金型工場で「図面サーバと工作機械の分離」が最優先なのか? | 自動車・電機・工作機械メーカーの取引継続条件として、2026年度からSCS評価制度「3」の取得と図面保護の証跡提示が標準化されます。 |
| 2. 現場での進め方と対策 | 発注元(親会社)が見ている「製造業のSCS★3審査ポイント」比較表 | OS更新ができない古いNC工作機械や検査装置は、買い替えるのではなく「事務用LANと工場LANの分離(VLAN隔離)」で安全性を証明できます。 |
| 3. 関連する制度とルール | 工場の稼働を1分も止めずに進める「SCS★3移行 3ステップ」 | 高価な専用ボックスをリース契約しなくても、「3D CAD図面の暗号化共有」「USBメモリ持ち歩き廃止」「書き換え不能バックアップ」の3点で3を取得可能です。 |
| 4. 詳しい技術仕様としくみ | 理解を深める確認クイズ(工場セキュリティ編) | いいえ、機械ごと買い替える必要はありません。SCS評価制度(★3)やNIST SP 800-171の考え方では、OSの更新が物理的に不可能な産業機械(OT機器)については、「事務用ネットワークやインターネットから論理的・物理的に切り離すこと(VLAN分離・通信制御)」と「プログラム転送用の仲介フォルダを厳格に監視すること」によって代替措置(補償統制)として認められます。 |
- 01. 自動車・電機・工作機械メーカーの取引継続条件として、2026年度からSCS評価制度「3」の取得と図面保護の証跡提示が標準化されます。
- 02. OS更新ができない古いNC工作機械や検査装置は、買い替えるのではなく「事務用LANと工場LANの分離(VLAN隔離)」で安全性を証明できます。
- 03. 高価な専用ボックスをリース契約しなくても、「3D CAD図面の暗号化共有」「USBメモリ持ち歩き廃止」「書き換え不能バックアップ」の3点で3を取得可能です。
01. なぜ金属加工・金型工場で「図面サーバと工作機械の分離」が最優先なのか?
日本のものづくりを支える金属加工・金型製作・精密部品メーカーには、発注元(完成車メーカーや大手重電・産業機械メーカー)から最高機密である「新製品の3D CAD図面(STEP・IGES・DXF等)」や「金型設計データ・加工条件(ノウハウの結晶)」が集まります。
しかし多くの町工場や中堅製造現場では、「事務所でメールを受信するパソコン」「3D CADで設計するワークステーション」「工場の奥にあるマシニングセンタやワイヤー放電加工機(NC工作機械)」が、1台の家庭用ルーターやハブですべて同じネットワークに繋がっているケースが少なくありません。
製造業サプライチェーンを取り巻く3つの一次データ
国内製造業のランサムウェア被害では、リモート保守用の古いVPN機器や、事務用PCに届いた偽の見積書メールから工場内のNAS(図面保管庫)へ感染が広がる事例が大半を占めています。
高精度なNC工作機械や三次元測定機は15年以上大切に使われるため、制御部にWindows XP/7等の古いOSが残ります。そのため「機械の更新」ではなく「通信の隔離」がSCS★3の鍵となります。
書き換え不能なスナップショット(OpenZFS)でCAD図面とNCプログラムを保護しておけば、万が一事務PCが感染しても身代金を1円も払わず当日中に加工ラインを再開できます。
ひと目でわかる構造図解:事務LAN・CAD設計室・NC加工現場の「3区画分離モデル」
02. 発注元(親会社)が見ている「製造業のSCS★3審査ポイント」比較表
自動車部品や産業機械のサプライチェーンにおいて、親会社の購買部やセキュリティ監査人が特に重視するのは以下の4項目です。従来の「とりあえず外付けハードディスクにコピーしている」「USBメモリで機械に運んでいる」状態から、どのように変えれば3の適合証跡になるかを整理しました。
| 点検ポイント | 審査で指摘されやすい従来の運用 | SCS★3をクリアする推奨設計 |
|---|---|---|
| 01 3D CAD図面・金型データの保管 | 社内全員が読み書きできる共有NASに平文で保存。古いSMB1設定が有効のまま。 | 取引先別にアクセス権を分離し、SMBv3暗号化を強制。SMB1は無効化。 |
| 02 NC工作機械へのプログラム転送 | 設計室のPCから個人のUSBメモリにGコードをコピーし、工場の機械へ歩いて挿す。 | USBポートを物理ロックし、ウイルス検査済みの仲介フォルダ(DNC)からネットワーク経由で読み出し専用取得。 |
| 03 古いOSが残る検査機・制御PC | 事務用PCと同じハブに接続され、インターネットへ自由に通信できる状態で放置。 | 工場専用VLAN(区画03)へ隔離し、外部インターネット通信と不要ポートをファイアウォールで全体遮断。 |
| 04 バックアップと復元訓練 | NASに繋ぎっぱなしのUSB外付けHDDへ夜間コピー(ランサムウェア感染時に同時暗号化)。 | 通常権限では削除できない不変スナップショット保管+年1回のCADファイル復元テスト記録を作成。 |
03. 工場の稼働を1分も止めずに進める「SCS★3移行 3ステップ」
「セキュリティ対策のために工場のラインを止めるわけにはいかない」というのが製造現場の本音です。以下の3ステップであれば、稼働中の工作機械を止めることなく、週末や昼休みの切り替えだけで安全性を引き上げることができます。
ステップ 01:工場内の「つながっている機器一覧(資産台帳)」を1時間で作成する
まずは事務所のパソコン、CADワークステーション、複合機、Wi-Fiルーター、そしてLANケーブルが挿さっている工作機械・測定器をリストアップします。特に「機械メーカーが遠隔メンテナンス用に設置したモバイルルーターやVPN装置」が隠れていないかを確認することが、SCS★3の第一歩(資産の把握)になります。
ステップ 02:スマートスイッチと防火壁で「事務」「設計」「加工現場」の間仕切りを作る
既存のLAN配線をすべて引き直す必要はありません。ハブをVLAN(仮想ネットワーク分割)対応の産業用スイッチに置き換え、事務所のPCからは工場の工作機械へ直接アクセスできないようルールを設定します。NCプログラムの受け渡しには、拡張子(.nc / .tap 等)とファイルサイズだけを厳格に許可する「一方通行の仲介フォルダ」を設けます。
ステップ 03:CAD図面サーバに「0.1秒の異常暗号化ストップ」と「不変金庫バックアップ」を導入する
万が一、設計担当者のパソコンがウイルスに感染して図面フォルダを勝手に暗号化し始めた場合でも、ファイルの乱雑度(エントロピー)の急上昇を0.1秒で検知してそのパソコンだけを自動で切り離し、15分前の無傷なスナップショットから即座に図面を復元できる体制を整えます。
現場で陥りやすい落とし穴と回避策(製造業編)
機械の故障時にメーカーが遠隔診断するためのVPNルーターが常時接続されたままだと、そこが攻撃者の裏口になります。【回避策】保守を受ける時だけコンセント(または専用スイッチポート)をONにする物理スイッチ運用にするか、mTLS(電子証明書)+時間限定許可に切り替えましょう。
工場LANをインターネットから切り離していても、検査用のUSBメモリを事務PCと工作機械の間で往復させればウイルスは簡単に飛び移ります。【回避策】USBポートには物理キャップを取り付け、データ移動は必ず「自動検査つきの仲介フォルダ」経由に一本化してください。
30年前の工作機械がSMBv1しか話せないからといって、最新の3D CADが入ったメインNASのSMBv1を有効にすると、ランサムウェア(WannaCry系)の格好の標的になります。【回避策】メインNASはSMBv3暗号化専用とし、古い工作機械とのやり取りは小容量の「中継専用ゲートウェイ」だけに限定します。
30秒でできる!製造現場のSCS★★3準備度セルフチェック(3項目)
該当する項目にチェックを入れると、現在の達成状況と次に取るべき対策がその場で表示されます(入力内容はブラウザ内でのみ処理されます)。
理解を深める確認クイズ(工場セキュリティ編)
Q. 工場で15年前から稼働している高精度マシニングセンタ(制御部に古いWindowsを搭載)があります。2026年SCS評価制度(★3)を取得する際、最も現実的で正しい対策はどれでしょうか?
選択肢 A:古いOSがあると原則として審査に通らないため、数千万円かけて工作機械をすべて新品に買い替える クリックして解説を見る →
いいえ、高額な機械を無理に買い替える必要はありません。
SCS評価制度や国際基準(NIST SP 800-171)では、更新できない産業機械に対しては「ネットワークの隔離と通信制限(選択肢B)」を行うことで安全性を担保する仕組みが認められています。
選択肢 B:事務用ネットワークやインターネットから分離(VLAN隔離)し、検査済みの加工プログラムだけを仲介フォルダ経由で渡す クリックして解説を見る →
正解です!これが製造業における最も費用対効果の高い「補償統制(代替防御策)」です。
古い制御OSが外部のインターネットや事務PCと直接通信できないように防火壁で守り、USBメモリの直挿しをやめて仲介フォルダ経由にすることで、機械の寿命を最大限に活かしながらSCS★3の基準を満たせます。
選択肢 C:工作機械の制御パソコンに市販の無料ウイルス対策ソフトを無理やりインストールしてネットに繋ぐ クリックして解説を見る →
これは非常に危険です!
リアルタイム制御を行う工作機械に一般的なウイルス対策ソフトを入れると、加工中に負荷がかかって主軸が止まったり加工精度が狂ったりする原因になります。機械本体はいじらず、外側のネットワーク(選択肢B)で守るのが鉄則です。
金型職人の「現合(げんごう)合わせ」の知恵と、デジタル図面のハッシュ検算
日本の金型現場では、1000分の1ミリ(1ミクロン)の噛み合わせを確かめるために、光明丹(こうみょうたん)を塗って当たりを見る丁寧な確認作業が行われてきました。デジタルの世界で3D CAD図面やGコードが「1ビットも改ざんされていないこと」を確かめる暗号学的ハッシュ値(SHA-256 / BLAKE3)と電子署名(Ed25519)は、まさにデジタル版の光明丹です。親会社から受け取った図面と、加工機に入るプログラムの指紋(ハッシュ値)を自動で照合することで、図面の取り違え(旧版での誤加工)とサイバー改ざんの両方を同時に防ぐことができます。
工場のネットワーク診断・SCS★★3取得支援のご案内
登録情報処理安全確保支援士が、既存のNC工作機械やCAD環境を活かした最小コストの分離設計と証跡作成を支援します。
場面別の実務確認ポイント
発注元からの「SCS★★3取得要請」への対応コストと、老朽化した工作機械を買い替えずに審査を通す方法が3分でわかります。
USBメモリでのNCプログラム受け渡しをやめ、現場の手間を増やさずに安全に図面と加工データを送る手順(第2章)を解説しています。
親会社の調達部門に提出する「ネットワーク構成図」「バックアップ復元テスト記録」の具体的な作り方が確認できます。
技術仕様セクションにて、SMBv3暗号化強制、FreeBSD pfによるOT/IT分離、CADファイルのエントロピー監視のRust実装を公開しています。
製造業OT/IT境界におけるSMBv3暗号化強制・FreeBSD pfマイクロセグメンテーション・3D CADファイルのエントロピー急変検知とEd25519監査証跡署名
本モノグラフでは、金属加工・金型サプライヤーが経済産業省・IPA「SCS評価制度(3〜4)」および NIST SP 800-171 Rev.3(CUI:管理対象非機密情報の保護)に準拠するための技術仕様として、(1) SMB 3.1.1(AES-128-GCM / AES-256-GCM)によるCAD共有セッションの暗号化強制、(2) FreeBSD pf を用いたレガシーNC工作機械(FANUC FOCAS / Mitsubishi MELDAS / Mazak Smooth等)のステートフル分離、(3) 3D CADデータのシャノン・エントロピー変化によるランサムウェア0.1秒遮断とEd25519署名付き監査ログ生成を実装レベルで定義する。
01. SMB 3.1.1 暗号化ネゴシエーションとダウングレード攻撃の遮断:
3D CADデータ(STEP AP242 / Parasolid .x_t)を保管するファイルサーバでは、EternalBlue(MS17-010)等の標的となるSMBv1をカーネルおよびSamba設定(server min protocol = SMB3_11, smb encrypt = required)で確実な防止する。SMB 3.1.1のPreauth Integrity Capabilities(SHA-512セッションハッシュ連鎖)により中間者によるプロトコルダウングレードを防止し、Transform Header(プロトコルID 0xFD 'S' 'M' 'B')を用いたAES-128-GCM / AES-256-GCM認証付き暗号化通信のみを許可する。
02. FreeBSD pf による OT(NC工作機械)VLANの補償統制ルール:
レガシーOSを搭載するNC工作機械サブネット(vlan30: 10.20.30.0/24)に対しては、デフォルト拒否(block drop all)を基底とし、DNC中継ゲートウェイ(10.20.20.10)からのGコード読み出しおよびFOCAS稼働監視ポート(TCP 8193)のみを単方向ステートフル許可(pass in quick on vlan20 proto tcp from 10.20.20.10 to 10.20.30.0/24 port 8193 flags S/SA keep state (max-src-conn 4, max-src-conn-rate 10/5, overload <ot_quarantine> flush global))として定義する。これにより、事務系VLAN(vlan10)が侵害された場合でも、OT機器へのラテラルムーブメント経路は物理・論理の双方で閉鎖される。
03. 3D CAD / NCファイルのバイト分布特性とシャノン・エントロピー監視: ASCII形式のSTEPファイル(ISO 10303-21)やGコード(RS-274D)の1バイト単位の出現確率 p(x_i) に基づくシャノン・エントロピー H(X) = -∑_i=0^255 p(x_i) log₂ p(x_i) は通常 4.10 ∼ 5.65 bits/byte の範囲に収まり、バイナリCAD形式やZIP圧縮された3Dアセンブリでもヘッダ・チャンク構造により 7.20 ∼ 7.75 bits/byte 前後となる。一方、ランサムウェア(LockBit / BlackBasta等)のストリーム暗号・ブロック暗号出力は理論上限 8.0 bits/byte に漸近する(H(X) > 7.93)。書き込みストリームの先頭およびスライディングウィンドウで H(X) とカイ二乗一様性検定統計量 χ^2 = ∑_i=0^255 ((O_i - E)^2)/(E) を同時評価することで、誤検知を防ぎつつ異常暗号化プロセスを100ミリ秒以内に隔離し、直前のOpenZFS不変スナップショットを保護する。
| Control Layer | Target Asset / Protocol | Enforcement Parameter | SCS ★3 Audit Evidence |
|---|---|---|---|
| L2/L3 Boundary | VLAN 10 (IT) / VLAN 20 (CAD) / VLAN 30 (OT) | FreeBSD pf default-deny + state-rate limit | pfctl -sr ruleset hash & blocked packet log |
| CAD Vault Storage | Samba 4.20+ over OpenZFS 2.2 | SMB3_11 only, AES-GCM, 15m zfs snapshot | Ed25519 signed daily compliance manifest |
| DNC Program Relay | G-Code (.nc / .tap) Staging Directory | Strict ASCII grammar + SHA-256 whitelist | Immutable transfer ledger per machine ID |
| Ransomware Circuit | CAD File Write Stream Monitor | H(X) > 7.93 && rename burst > 5 files/sec | Automated client IP quarantine + ZFS hold |
#![forbid(unsafe_code)]
use std::fmt::Write;
/// Allowed CAD / CAM file formats in the manufacturing vault and DNC relay.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ManufacturingAssetKind {
StepIso10303,
IgesAscii,
ParasolidBinary,
FanucGCode,
}
/// Result of inspecting a CAD or NC file write operation before committing to ZFS.
#[derive(Debug, Clone, PartialEq)]
pub struct WriteInspectionVerdict {
pub shannon_entropy_bits: f64,
pub chi_square_uniformity: f64,
pub is_ransomware_suspect: bool,
pub gcode_syntax_valid: bool,
pub fnv1a_64_digest: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MfgGuardError {
EmptyPayload,
ForbiddenControlByte { offset: usize, byte: u8 },
RansomwareEntropySpike { entropy_milli: u32 },
SmbEncryptionNotEnforced,
}
/// Computes Shannon entropy H(X) in [0.0, 8.0] and Chi-Square uniformity statistic
/// in a single zero-allocation pass over the byte slice.
pub fn analyze_byte_distribution(payload: &[u8]) -> Result<(f64, f64, u64), MfgGuardError> {
if payload.is_empty() {
return Err(MfgGuardError::EmptyPayload);
}
let mut counts = [0u32; 256];
let mut fnv_hash: u64 = 0xcbf29ce484222325;
for &b in payload {
counts[b as usize] += 1;
fnv_hash ^= u64::from(b);
fnv_hash = fnv_hash.wrapping_mul(0x00000100000001B3);
}
let len_f = payload.len() as f64;
let expected = len_f / 256.0;
let mut entropy = 0.0_f64;
let mut chi_sq = 0.0_f64;
for &c in &counts {
if c > 0 {
let p = f64::from(c) / len_f;
entropy -= p * p.log2();
}
let diff = f64::from(c) - expected;
chi_sq += (diff * diff) / expected;
}
Ok((entropy, chi_sq, fnv_hash))
}
/// Validates that an incoming DNC program contains strictly safe RS-274D G-code ASCII
/// characters and no shell/binary injection sequences before exposing it to VLAN 30.
pub fn verify_nc_gcode_safety(payload: &[u8]) -> Result<(), MfgGuardError> {
for (idx, &b) in payload.iter().enumerate() {
let allowed = b.is_ascii_alphanumeric()
|| matches!(
b,
b'\r' | b'\n' | b'\t' | b' ' | b'%' | b'(' | b')' | b'.' | b'-'
| b'+' | b'/' | b'=' | b'#' | b'[' | b']' | b';' | b':'
);
if !allowed {
return Err(MfgGuardError::ForbiddenControlByte { offset: idx, byte: b });
}
}
Ok(())
}
/// Evaluates a CAD/CAM file write and emits a deterministic SCS ★3 audit attestation line.
pub fn inspect_and_attest_mfg_write(
client_vlan: u16,
smb_encrypted: bool,
kind: ManufacturingAssetKind,
payload: &[u8],
) -> Result<(WriteInspectionVerdict, String), MfgGuardError> {
if !smb_encrypted {
return Err(MfgGuardError::SmbEncryptionNotEnforced);
}
let (entropy, chi_sq, digest) = analyze_byte_distribution(payload)?;
let gcode_ok = match kind {
ManufacturingAssetKind::FanucGCode => verify_nc_gcode_safety(payload).is_ok(),
_ => true,
};
// Uncompressed ASCII STEP/G-code has entropy < 6.0; encrypted ransomware approaches 8.0
// with low chi-square deviation (< 310.0 across 255 degrees of freedom).
let is_suspect = entropy > 7.93 && chi_sq < 310.0;
if is_suspect {
return Err(MfgGuardError::RansomwareEntropySpike {
entropy_milli: (entropy * 1000.0) as u32,
});
}
let verdict = WriteInspectionVerdict {
shannon_entropy_bits: entropy,
chi_square_uniformity: chi_sq,
is_ransomware_suspect: is_suspect,
gcode_syntax_valid: gcode_ok,
fnv1a_64_digest: digest,
};
let mut audit_line = String::with_capacity(160);
let _ = write!(
&mut audit_line,
"SCS★3-MFG-AUDIT|vlan={}|smb3_enc=true|kind={:?}|H={:.4}|chi2={:.1}|fnv64={:016x}|gcode_ok={}",
client_vlan, kind, entropy, chi_sq, digest, gcode_ok
);
Ok((verdict, audit_line))
}