概要
実務で、Pythonで開発した業務用ツールを顧客環境やオンプレミス環境に配布する機会がありました。その際、配布先でコードを動かす必要がある一方で、業務ロジックや実装上の工夫をそのまま開示したくない、という課題がありました。そこで選択肢になったのが、Pythonコードを読みにくくして解析コストを上げるPyArmorによる難読化です。
難読化は暗号化とは異なり、「読める/動くが、理解しづらい」状態にする技術です。完全に秘密を守るものではありません。では、AIによるコード生成・解析が一般化し、リバースエンジニアリングの容易化が議論される現在、コードを「読みにくくする」対策はどこまで有効なのでしょうか。
本発表では、PyArmorで難読化したPythonコードを題材に、暗号化と難読化の違い、元コードを取り戻す「復元」と、同じ振る舞いを作る「再現」の違いを整理します。そのうえで、pyarmor gen により生成される pyarmor 呼び出しとランタイムバイナリの役割、実行時のPythonオブジェクトやコードオブジェクトに残る関数名・変数名・定数・型注釈などの手がかりを観察します。さらに、デフォルト設定と追加の保護設定で残る情報がどう変わるのか、それらをAIに与えた場合に処理内容をどこまで推測・再現できるのかを検証します。
検証結果をもとに、難読化に任せてよい範囲、追加の保護を検討すべき情報、サーバー側に寄せるべき情報を整理します。難読化済みコードであっても、機密性の高い文字列や秘密情報を埋め込んでよいわけではありません。Pythonコードを外部配布する開発者に向けて、AI時代に難読化を使う際の現実的な判断軸を共有します。
スピーカーについて
山本隼輔
株式会社PKSHA Technology のソフトウェアエンジニア。2026年に新卒入社し、現在は AI Research & Solution 事業部でシステム開発を担当。 大学院時代は自然言語処理(NLP)の研究に取り組み、NLPIR 2025にてBest Student Paper賞およびBest Presentation賞を受賞。PyCon JP は今回が初登壇。趣味はピアノとボルダリング。