2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Intel SGX - Enclave内で使用不可能なC標準関数一覧

Last updated at Posted at 2019-08-06

Intel SGX - Enclave内で使用不可能なC標準関数一覧

以前参考文献[1]のページに載っていた、Enclave内で使用できないC標準関数一覧を手元に残しておいたものをそのまま掲載します。

本記事の執筆時点で[1]が消滅したのが割と前なので情報が古い可能性はありますが、SGXのOSを信頼していないという性質上、あまり大きく変わってはいないはずです。

ヘッダ名 SGXSDKに含まれるか 非対応マクロ 非対応関数
complex.h Yes Intelコンパイラ16.0使用時のみ使用可 Intelコンパイラ16.0使用時のみ使用可
inttypes.h Yes SCNdN, SCNiN, SCNoN, SCNuN, SCNxN, SCNdLEASTN, SCNiLEASTN, SCNoLEASTN, SCNuLEASTN, SCNxLEASTN, SCNdFASTN, SCNiFASTN, SCNoFASTN, SCNuFASTN, SCNxFASTN, SCNdMAX, SCNiMAX, SCNoMAX, SCNuMAX, SCNxMAX, SCNdPTR, SCNiPTR, SCNoPTR, SCNuPTR, SCNxPTR wcstoimax(), wcstoumax()
locale.h No LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, struct lconv setlocale(), localeconv()
signal.h No sig_atomic_t, SIG_DFL, SIG_ERR, SIG_IGN, SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM signal(), raise()
stdatomic.h Yes ATOMIC_<TYPE>_LOCK_FREE, atomic_<datatype> kill_dependency(), atomic_fetch_and(), atomic_fetch_and_explicit(), atomic_thread_fence(), atomic_signal_fence()
stdio.h Yes FILE, fpos_t, _IOFBF, _IOLBF, _IONBF, FILENAME_MAX, FOPEN_MAX, L_tmpnam, SEEK_CUR, SEEK_END, SEEK_SET, TMP_MAX, stderr, stdin, stdout remove(), rename(), tmpfile(), tmpnam(), fclose(), fflush(), fopen(), fopen_s(), freopen(), freopen_s(), setbuf(), setvbuf(), fprintf(), fprintf_s(), fscanf(), fscanf_s(), printf(), scanf(), scan_s(), snprintf_s(), sprintf(), sprintf_s(), sscanf(), sscanf_s(), vfprintf(), vfprintf_s(), vfscanf(), vfscanf_s(), vprintf(), vprintf_s(), vscanf(), vscanf_s(), vsnprintf_s(), vsprintf(), vsprintf_s(), vsscanf(), vsscanf_s(), fgetc(), fgets(), fputc(), fputs(), getc(), getchar(), gets(), gets_s(), putc(), putchar(), puts(), ungetc(), fread(), fwrite(), fgetpos(), fseek(), fsetpos(), ftell(), rewind(), clearerr(), feof(), ferror(), perror()
stdlib.h Yes なし rand(), srand(), atexit(), exit(), _Exit(), quick_exit(), at_quick_exit(), getenv(), getenv_s(), system(), bsearch_s(), qsort_s(), mblen(), mbtowc(), wctomb(), wctomb_s(), mbstowcs(), mbstowcs_s(), wcstombs(), wcstombs_s()
string.h Yes なし memcpy_s(), memmove_s(), strcpy(), strcpy_s(), strncpy_s(), strcat(), strcat_s(), strstr()(*), strtok_s(), strerror_s(), strerrorlen_s(), strlen_s()
threads.h No thrd_t, thrd_success, thrd_timeout, thrd_busy, thrd_nomem, thrd_error, thrd_start_t, mtx_t, mtx_plain mtx_recursive, mtx_timed, cnd_t, tss_t, TSS_DTOR_ITERATIONS, tss_dtor_t thrd_create(), thrd_equal(), thrd_current(), thrd_sleep(), thrd_yield(), thrd_exit(), thrd_detach(), thrd_join(), mtx_init(), mtx_lock(), mtx_timedlock(), mtx_trylock(), mtx_unlock(), mxm_destroy(), call_once(), cnd_init(), cnd_signal(), cnd_broadcast(), cnd_wait(), cnd_timedwait(), cnd_destroy(), tss_create(), tss_get(), tss_set(), tss_delete()
time.h Yes timespec clock(), mktime(), time(), asctime_s(), ctime(), ctime_s(), gmtime(), gtime_s(), localtime(), localtime_s()
uchar.h Yes __STDC_UTF_16__, __STDC_UTF_32__ mbrtoc16() , c16rtomb(), mbrtoc32(), c32rtomb()
wchar.h Yes なし fwprintf(), fwscanf(), swscanf(), vfwprintf(), vfwscanf(), vswscanf(), vwprintf(), vwscanf(), wprintf(), wscanf(), fgetwc(), fgetws(), fputwc(), fputws(), fwide(), getwc(), getwchar(), putwc(), putwchar(), ungetwc(), wcstod(), wcstof(), wcstold(), wcstol(), wcstoll(), wcstoul(), wcstoull(), wcscpy(), wcscpy_s(), wcsncpy_s(), wmemcpy_s(), wmemmove_s(), wcscat(), wcscat_s(), wcsncat_s(), wcstok_s(), wcsnlen_s(), wcsftime(), wctob(), mbsinit(), mbrlen(), mbrtowc(), wcrtomb(), wcrtomb_s(), mbsrtowcs(), mbsrtowcs_s(), wcsrtombs(), wcsrtombs_s()
wctype.h Yes なし iswalnum(), iswalpha(), iswblank(), iswcntrl(), iswdigit(), iswgraph(), iswlower(), iswprint(), iswpunct(), iswspace(), iswupper(), iswxdigit(), wctype(), towlower(), towupper(), towctrans(), wctrans()
  • フォーマット文字列攻撃を回避するため、%n指定子の利用は即時のランタイムエラーを引き起こします。

  • strstr()はTrusted-C(Enclave用に安全性を向上させたCライブラリ)独自仕様のものを利用可能です。標準Cのものはchar strstr(const char*, const char*)ですが、Trusted-Cのものはconst char* strstr (const char*, const char*)となっています。

memset関数について

標準Cのmemset関数の他に、Trusted-C独自のmemset_s関数が利用可能です。memset関数は秘密情報を含まない場合の初期化やクリア、memset_s関数は秘密情報を含む場合の(特に)クリアに用いるべきです。memset関数はコンパイラの最適化の段階で安全でない挙動を取る場合があるため、秘密情報を扱う場合はmemset_s関数を使うべきでしょう。ただし、memset_s関数はパフォーマンスの最適化がmemset関数に比べ不十分であるため、使用は必要最低限に留めるべきです。

参考

[1]Intel® Software Guard Extensions SDK - Unsupported C Standard Functions (リンク無効)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?